📄 pacoblaze.v.html
字号:
<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> && <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> && ~<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> && <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> && ~<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> && (<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> && <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> && (<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> && <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> && (<a onClick="return qs(event,this,25)" class=SW href="#251">conditional_match</a> && (<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> && <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> <= 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> <= 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> <= 1; <span class=C>// writeback zero, carry</span> <span class=K>end</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -