⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pacoblaze.v.html

📁 和picoblaze完全兼容的mcu ip core
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<span class=C>/* Register file */</span><a name="198"></a><span class=K>reg</span> <a  onClick="return qs(event,this,47)"  class=SR href="#324">register_x_write_enable</a>;<a name="199"></a><span class=K>wire</span> [<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#101">register_width</a>-1:0] <a  onClick="return qs(event,this,48)"  class=SW href="#294">register_x_data_in</a>, <a  onClick="return qs(event,this,49)"  class=SW href="#199">register_x_data_out</a>, <a  onClick="return qs(event,this,50)"  class=SW href="#199">register_y_data_out</a>;<span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span><span class=K>reg</span> register_wx_write_enable;<span class=K>wire</span> [<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#101">register_width</a>-1:0] register_w_data_in, register_u_data_out, register_v_data_out;<span class=M>`endif</span><span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze1.v.html#10">PACOBLAZE_REGISTER</a> register(  <a  onClick="return qs(event,this,32)"  class=SW href="#115">idu_x_address</a>, <a  onClick="return qs(event,this,47)"  class=SR href="#198">register_x_write_enable</a>, <a  onClick="return qs(event,this,48)"  class=SW href="#199">register_x_data_in</a>, <a  onClick="return qs(event,this,49)"  class=SW href="#199">register_x_data_out</a>,  <a  onClick="return qs(event,this,33)"  class=SW href="#115">idu_y_address</a>, <a  onClick="return qs(event,this,50)"  class=SW href="#199">register_y_data_out</a>,<span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span>  register_wx_write_enable, register_w_data_in, register_u_data_out, register_v_data_out,<span class=M>`endif</span>  <a  onClick="return qs(event,this,10)"  class=SI href="#82">reset</a>, <a  onClick="return qs(event,this,11)"  class=SI href="#83">clk</a>);<span class=C>/* Call/return stack */</span><a name="215"></a><span class=K>wire</span> <a  onClick="return qs(event,this,51)"  class=SW href="#282">stack_write_enable</a>, <a  onClick="return qs(event,this,52)"  class=SW href="#284">stack_update_enable</a>, <a  onClick="return qs(event,this,53)"  class=SW href="#288">stack_push_pop</a>;<a name="216"></a><span class=K>wire</span> [<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#85">stack_width</a>-1:0] <a  onClick="return qs(event,this,54)"  class=SW href="#216">stack_data_in</a> = <a  onClick="return qs(event,this,12)"  class=SR href="#422">program_counter</a>;<a name="217"></a><span class=K>wire</span> [<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#85">stack_width</a>-1:0] <a  onClick="return qs(event,this,55)"  class=SW href="#217">stack_data_out</a>;<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze1.v.html#12">PACOBLAZE_STACK</a> stack(  <a  onClick="return qs(event,this,51)"  class=SW href="#215">stack_write_enable</a>, <a  onClick="return qs(event,this,52)"  class=SW href="#215">stack_update_enable</a>, <a  onClick="return qs(event,this,53)"  class=SW href="#215">stack_push_pop</a>, <a  onClick="return qs(event,this,54)"  class=SW href="#216">stack_data_in</a>, <a  onClick="return qs(event,this,55)"  class=SW href="#217">stack_data_out</a>,  <a  onClick="return qs(event,this,10)"  class=SI href="#82">reset</a>, <a  onClick="return qs(event,this,11)"  class=SI href="#83">clk</a>);<span class=C>/* Scratchpad RAM */</span><span class=M>`ifdef</span> <a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#41">HAS_SCRATCH_MEMORY</a><a name="226"></a><span class=K>reg</span> <a  onClick="return qs(event,this,56)"  class=SR href="#363">scratch_write_enable</a>;<a name="227"></a><span class=K>wire</span> [<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#119">scratch_depth</a>-1:0] <a  onClick="return qs(event,this,57)"  class=SW href="#227">scratch_address</a> =  (<a  onClick="return qs(event,this,31)"  class=SW href="#114">idu_operand_selection</a> == 0) ? <a  onClick="return qs(event,this,36)"  class=SW href="#119">idu_scratch_address</a> :  <a  onClick="return qs(event,this,50)"  class=SW href="#199">register_y_data_out</a>[<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#119">scratch_depth</a>-1:0];<a name="230"></a><span class=K>wire</span> [<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#118">scratch_width</a>-1:0] <a  onClick="return qs(event,this,58)"  class=SW href="#230">scratch_data_out</a>;<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze1.v.html#11">PACOBLAZE_SCRATCH</a> scratch(  <a  onClick="return qs(event,this,57)"  class=SW href="#227">scratch_address</a>, <a  onClick="return qs(event,this,56)"  class=SR href="#226">scratch_write_enable</a>, <a  onClick="return qs(event,this,49)"  class=SW href="#199">register_x_data_out</a>, <a  onClick="return qs(event,this,58)"  class=SW href="#230">scratch_data_out</a>,  <a  onClick="return qs(event,this,10)"  class=SI href="#82">reset</a>, <a  onClick="return qs(event,this,11)"  class=SI href="#83">clk</a>);<span class=M>`endif</span><span class=C>/* Miscellaneous */</span><a name="239"></a><span class=K>assign</span> <a  onClick="return qs(event,this,1)"  class=SO href="#71">address</a> = <a  onClick="return qs(event,this,12)"  class=SR href="#422">program_counter</a>;<a name="241"></a><span class=K>assign</span> <a  onClick="return qs(event,this,5)"  class=SO href="#75">out_port</a> = <a  onClick="return qs(event,this,49)"  class=SW href="#199">register_x_data_out</a>;<a name="242"></a><span class=K>assign</span> <a  onClick="return qs(event,this,3)"  class=SO href="#73">port_id</a> =  (<a  onClick="return qs(event,this,31)"  class=SW href="#114">idu_operand_selection</a> == 0) ? <a  onClick="return qs(event,this,35)"  class=SW href="#117">idu_port_address</a> : <a  onClick="return qs(event,this,50)"  class=SW href="#199">register_y_data_out</a>;<span class=M>`ifdef</span> <a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#36">HAS_RESET_LATCH</a><a name="246"></a><span class=K>assign</span> <a  onClick="return qs(event,this,22)"  class=SW href="#104">internal_reset</a> = <a  onClick="return qs(event,this,20)"  class=SR href="#397">reset_latch</a>[1];<span class=M>`else</span><span class=K>assign</span> <a  onClick="return qs(event,this,22)"  class=SW href="#104">internal_reset</a> = <a  onClick="return qs(event,this,10)"  class=SI href="#82">reset</a>;<span class=M>`endif</span><a name="251"></a><span class=K>assign</span> <a  onClick="return qs(event,this,25)"  class=SW href="#106">conditional_match</a> =  (!<a  onClick="return qs(event,this,38)"  class=SW href="#122">idu_conditional</a>  || <a  onClick="return qs(event,this,39)"  class=SW href="#123">idu_condition_flags</a> == <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#214">flag_c</a> &amp;&amp; <a  onClick="return qs(event,this,15)"  class=SR href="#339">carry</a>  || <a  onClick="return qs(event,this,39)"  class=SW href="#123">idu_condition_flags</a> == <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#215">flag_nc</a> &amp;&amp; ~<a  onClick="return qs(event,this,15)"  class=SR href="#339">carry</a>  || <a  onClick="return qs(event,this,39)"  class=SW href="#123">idu_condition_flags</a> == <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#212">flag_z</a> &amp;&amp; <a  onClick="return qs(event,this,14)"  class=SR href="#339">zero</a>  || <a  onClick="return qs(event,this,39)"  class=SW href="#123">idu_condition_flags</a> == <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#213">flag_nz</a> &amp;&amp; ~<a  onClick="return qs(event,this,14)"  class=SR href="#339">zero</a>  ) ? 1 : 0;<a name="259"></a><span class=K>wire</span> <a  onClick="return qs(event,this,59)"  class=SW href="#259">is_jump</a> = <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#55">operation_is</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#483">op_jump</a>);<a name="260"></a><span class=K>wire</span> <a  onClick="return qs(event,this,60)"  class=SW href="#260">is_call</a> = <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#55">operation_is</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#484">op_call</a>);<a name="261"></a><span class=K>wire</span> <a  onClick="return qs(event,this,61)"  class=SW href="#261">is_return</a> = <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#55">operation_is</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#485">op_return</a>);<a name="262"></a><span class=K>wire</span> <a  onClick="return qs(event,this,62)"  class=SW href="#262">is_returni</a> = <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#55">operation_is</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#486">op_returni</a>);<a name="263"></a><span class=K>wire</span> <a  onClick="return qs(event,this,63)"  class=SW href="#263">is_input</a> = <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#55">operation_is</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#488">op_input</a>);<span class=M>`ifdef</span> <a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#41">HAS_SCRATCH_MEMORY</a><a name="265"></a><span class=K>wire</span> <a  onClick="return qs(event,this,64)"  class=SW href="#265">is_fetch</a> = <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#55">operation_is</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#492">op_fetch</a>);<span class=M>`endif</span><a name="268"></a><span class=K>assign</span> <a  onClick="return qs(event,this,23)"  class=SW href="#105">program_counter_source</a> =  (<a  onClick="return qs(event,this,17)"  class=SR href="#424">interrupt_latch</a>) ? <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#158">interrupt_vector</a> :  (<a  onClick="return qs(event,this,25)"  class=SW href="#251">conditional_match</a> &amp;&amp; (<a  onClick="return qs(event,this,59)"  class=SW href="#259">is_jump</a> || <a  onClick="return qs(event,this,60)"  class=SW href="#260">is_call</a>)) ? <a  onClick="return qs(event,this,37)"  class=SW href="#121">idu_code_address</a> : <span class=C>// PC from opcode</span>  (<a  onClick="return qs(event,this,25)"  class=SW href="#251">conditional_match</a> &amp;&amp; <a  onClick="return qs(event,this,61)"  class=SW href="#261">is_return</a> || <a  onClick="return qs(event,this,62)"  class=SW href="#262">is_returni</a>) ? <a  onClick="return qs(event,this,55)"  class=SW href="#217">stack_data_out</a> : <span class=C>// PC from stack</span>  <a  onClick="return qs(event,this,12)"  class=SR href="#422">program_counter</a>; <span class=C>// current PC</span><a name="274"></a><span class=K>assign</span> <a  onClick="return qs(event,this,24)"  class=SW href="#105">program_counter_next</a> =  (<a  onClick="return qs(event,this,17)"  class=SR href="#424">interrupt_latch</a> ||  <a  onClick="return qs(event,this,25)"  class=SW href="#251">conditional_match</a> &amp;&amp; (<a  onClick="return qs(event,this,59)"  class=SW href="#259">is_jump</a> || <a  onClick="return qs(event,this,60)"  class=SW href="#260">is_call</a>)  || <a  onClick="return qs(event,this,62)"  class=SW href="#262">is_returni</a>) ? <a  onClick="return qs(event,this,23)"  class=SW href="#268">program_counter_source</a> : <span class=C>// PC not incremented</span>  <a  onClick="return qs(event,this,23)"  class=SW href="#268">program_counter_source</a> + 1; <span class=C>// PC must be incremented</span><a name="280"></a><span class=K>assign</span> <a  onClick="return qs(event,this,26)"  class=SW href="#107">interrupt_assert</a> = <a  onClick="return qs(event,this,8)"  class=SI href="#78">interrupt</a> &amp;&amp; <a  onClick="return qs(event,this,16)"  class=SR href="#340">interrupt_enable</a>;<a name="282"></a><span class=K>assign</span> <a  onClick="return qs(event,this,51)"  class=SW href="#215">stack_write_enable</a> =  <a  onClick="return qs(event,this,22)"  class=SW href="#246">internal_reset</a> || <a  onClick="return qs(event,this,13)"  class=SR href="#421">timing_control</a>; <span class=C>// update stack at reset and T==1</span><a name="284"></a><span class=K>assign</span> <a  onClick="return qs(event,this,52)"  class=SW href="#215">stack_update_enable</a> = ~<a  onClick="return qs(event,this,13)"  class=SR href="#421">timing_control</a> &amp;&amp;  (<a  onClick="return qs(event,this,25)"  class=SW href="#251">conditional_match</a> &amp;&amp; (<a  onClick="return qs(event,this,60)"  class=SW href="#260">is_call</a> || <a  onClick="return qs(event,this,61)"  class=SW href="#261">is_return</a>)  || <a  onClick="return qs(event,this,62)"  class=SW href="#262">is_returni</a>  || <a  onClick="return qs(event,this,17)"  class=SR href="#424">interrupt_latch</a>);<a name="288"></a><span class=K>assign</span> <a  onClick="return qs(event,this,53)"  class=SW href="#215">stack_push_pop</a> = <a  onClick="return qs(event,this,17)"  class=SR href="#424">interrupt_latch</a> ||  ((<a  onClick="return qs(event,this,25)"  class=SW href="#251">conditional_match</a> &amp;&amp; <a  onClick="return qs(event,this,61)"  class=SW href="#261">is_return</a> || <a  onClick="return qs(event,this,62)"  class=SW href="#262">is_returni</a>) ? 0 : 1);<a name="291"></a><span class=K>assign</span> <a  onClick="return qs(event,this,42)"  class=SW href="#151">alu_operand_a</a> = <a  onClick="return qs(event,this,49)"  class=SW href="#199">register_x_data_out</a>;<a name="292"></a><span class=K>assign</span> <a  onClick="return qs(event,this,43)"  class=SW href="#151">alu_operand_b</a> =  (<a  onClick="return qs(event,this,31)"  class=SW href="#114">idu_operand_selection</a> == 0) ? <a  onClick="return qs(event,this,34)"  class=SW href="#116">idu_implied_value</a> : <a  onClick="return qs(event,this,50)"  class=SW href="#199">register_y_data_out</a>;<a name="294"></a><span class=K>assign</span> <a  onClick="return qs(event,this,48)"  class=SW href="#199">register_x_data_in</a> =<span class=M>`ifdef</span> <a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#41">HAS_SCRATCH_MEMORY</a>  (<a  onClick="return qs(event,this,64)"  class=SW href="#265">is_fetch</a>) ? <a  onClick="return qs(event,this,58)"  class=SW href="#230">scratch_data_out</a> :<span class=M>`endif</span>  (<a  onClick="return qs(event,this,63)"  class=SW href="#263">is_input</a>) ? <a  onClick="return qs(event,this,7)"  class=SI href="#77">in_port</a> : <a  onClick="return qs(event,this,41)"  class=SW href="#151">alu_result</a>;<span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span><span class=K>assign</span> alu_operand_u = register_u_data_out;<span class=K>assign</span> alu_operand_v = register_v_data_out;<span class=K>assign</span> register_w_data_in = alu_resultw;<span class=M>`endif</span><span class=C>/*task decode;input [`operation_width-1:0] operation;beginendendtask*/</span><a name="pacoblaze3m_execute"></a><span class=K>task</span> <a  onClick="return qs(event,this,0)"  class=T href="#pacoblaze3m_execute">execute</a>;<a name="316"></a><span class=K>input</span> [<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#149">operation_width</a>-1:0] <a  onClick="return qs(event,this,0)"  class=SI href="#316">operation</a>;<span class=K>begin</span>  <span class=C>// synthesis parallel_case full_case</span><span class=M>`ifdef</span> <span class=D>USE_ONEHOT_ENCODING</span>  <span class=K>case</span> (1'b1)<span class=M>`else</span>  <span class=K>case</span> (<a  onClick="return qs(event,this,0)"  class=SI href="#316">operation</a>)<span class=M>`endif</span><a name="324"></a>    <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#54">operation</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#474">op_load</a>): <a  onClick="return qs(event,this,0)"  class=SR href="#198">register_x_write_enable</a> &lt;= 1; <span class=C>// load register with value</span>    <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#54">operation</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#477">op_and</a>),    <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#54">operation</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#478">op_or</a>),    <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#54">operation</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#482">op_xor</a>),    <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#54">operation</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#475">op_add</a>),    <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#54">operation</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#476">op_addcy</a>),    <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#54">operation</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#480">op_sub</a>),    <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#54">operation</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#481">op_subcy</a>),    <span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="#54">operation</a>(<span class=D>`</span><a  onClick="return qs(event,this,0)"  class=D href="pacoblaze_inc.v.html#479">op_rs</a>): <span class=K>begin</span>        <a  onClick="return qs(event,this,0)"  class=SR href="#198">register_x_write_enable</a> &lt;= 1; <span class=C>// writeback register</span><a name="335"></a>        <a  onClick="return qs(event,this,0)"  class=SR href="#102">zero_carry_write_enable</a> &lt;= 1; <span class=C>// writeback zero, carry</span>      <span class=K>end</span>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -