📄 pacoblaze.v.html
字号:
<a name="55"></a><span class=M>`define</span> <a onClick="return qs(event,this,0)" class=D href="pacoblaze_alu.v.html#43">operation_is</a>(x) (idu_operation == (x))<span class=M>`endif</span><span class=C>/** Top PacoBlaze module */</span><a name="pacoblaze3m"></a><a href="compare3m_tb.v.html#compare3m_tb_dut_0"><img alt="[Up: compare3m_tb dut_0]" align=bottom border=0 src="v2html-up.gif"></a><a href="pacoblaze3m_tb.v.html#pacoblaze3m_tb_dut"><img alt="[Up: pacoblaze3m_tb dut]" align=bottom border=0 src="v2html-up.gif"></a><span class=K>module</span> <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="compare3m_tb.v.html#6">PACOBLAZE</a>( <a onClick="return qs(event,this,1)" class=SO href="#71">address</a>, <a onClick="return qs(event,this,2)" class=SI href="#72">instruction</a>, <a onClick="return qs(event,this,3)" class=SO href="#73">port_id</a>, <a onClick="return qs(event,this,4)" class=SOR href="#74">write_strobe</a>, <a onClick="return qs(event,this,5)" class=SO href="#75">out_port</a>, <a onClick="return qs(event,this,6)" class=SOR href="#76">read_strobe</a>, <a onClick="return qs(event,this,7)" class=SI href="#77">in_port</a>, <a onClick="return qs(event,this,8)" class=SI href="#78">interrupt</a>,<span class=M>`ifdef</span> <a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#40">HAS_INTERRUPT_ACK</a> <a onClick="return qs(event,this,9)" class=SOR href="#80">interrupt_ack</a>,<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>);<a name="71"></a><span class=K>output</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#73">code_depth</a>-1:0] <a onClick="return qs(event,this,1)" class=SO href="#239">address</a>; <span class=C>///< Address output</span><a name="72"></a><span class=K>input</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#72">code_width</a>-1:0] <a onClick="return qs(event,this,2)" class=SI href="compare3m_tb.v.html#54">instruction</a>; <span class=C>///< Instruction input</span><a name="73"></a><span class=K>output</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#82">port_depth</a>-1:0] <a onClick="return qs(event,this,3)" class=SO href="#242">port_id</a>; <span class=C>///< Port address</span><a name="74"></a><span class=K>output</span> <a onClick="return qs(event,this,4)" class=SOR href="#350">write_strobe</a>; <span class=C>///< Port output strobe</span><a name="75"></a><span class=K>output</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#81">port_width</a>-1:0] <a onClick="return qs(event,this,5)" class=SO href="#241">out_port</a>; <span class=C>///< Port output</span><a name="76"></a><span class=K>output</span> <a onClick="return qs(event,this,6)" class=SOR href="#346">read_strobe</a>; <span class=C>///< Port input strobe</span><a name="77"></a><span class=K>input</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#81">port_width</a>-1:0] <a onClick="return qs(event,this,7)" class=SI href="compare3m_tb.v.html#58">in_port</a>; <span class=C>///< Port input</span><a name="78"></a><span class=K>input</span> <a onClick="return qs(event,this,8)" class=SI href="compare3m_tb.v.html#60">interrupt</a>; <span class=C>///< Interrupt request</span><span class=M>`ifdef</span> <a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#40">HAS_INTERRUPT_ACK</a><a name="80"></a><span class=K>output</span> <a onClick="return qs(event,this,9)" class=SOR href="#416">interrupt_ack</a>; <span class=C>///< Interrupt acknowledge (output)</span><span class=M>`endif</span><a name="82"></a><span class=K>input</span> <a onClick="return qs(event,this,10)" class=SI href="compare3m_tb.v.html#52">reset</a>; <span class=C>///< Reset input</span><a name="83"></a><span class=K>input</span> <a onClick="return qs(event,this,11)" class=SI href="compare3m_tb.v.html#51">clk</a>; <span class=C>///< Clock input</span><span class=C>/* Output registers */</span><span class=K>reg</span> <a onClick="return qs(event,this,4)" class=SOR href="#74">write_strobe</a>, <a onClick="return qs(event,this,6)" class=SOR href="#76">read_strobe</a>;<span class=C>/* Processor registers and signals */</span><a name="89"></a><span class=K>reg</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#73">code_depth</a>-1:0] <a onClick="return qs(event,this,12)" class=SR href="#422">program_counter</a>; <span class=C>///< Program counter</span><a name="90"></a><span class=K>reg</span> <a onClick="return qs(event,this,13)" class=SR href="#421">timing_control</a>; <span class=C>///< Timing control register</span><a name="92"></a><span class=K>reg</span> <a onClick="return qs(event,this,14)" class=SR href="#339">zero</a>; <span class=C>///< Zero flag</span><a name="93"></a><span class=K>reg</span> <a onClick="return qs(event,this,15)" class=SR href="#339">carry</a>; <span class=C>///< Carry flag</span><a name="94"></a><span class=K>reg</span> <a onClick="return qs(event,this,16)" class=SR href="#340">interrupt_enable</a>; <span class=C>///< Interrupt enable</span><a name="95"></a><span class=K>reg</span> <a onClick="return qs(event,this,17)" class=SR href="#424">interrupt_latch</a>; <span class=C>///< Interrupt latch hold</span><span class=K>reg</span> <a onClick="return qs(event,this,9)" class=SOR href="#80">interrupt_ack</a>; <span class=C>///< Interrupt acknowledge</span><a name="97"></a><span class=K>reg</span> <a onClick="return qs(event,this,18)" class=SR href="#438">zero_saved</a>; <span class=C>///< Interrupt-saved zero flag</span><a name="98"></a><span class=K>reg</span> <a onClick="return qs(event,this,19)" class=SR href="#438">carry_saved</a>; <span class=C>///< Interrupt-saved carry flag</span><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="100"></a><span class=K>reg</span> [1:0] <a onClick="return qs(event,this,20)" class=SR href="#397">reset_latch</a>; <span class=C>///< Reset latch</span><span class=M>`endif</span><a name="102"></a><span class=K>reg</span> <a onClick="return qs(event,this,21)" class=SR href="#335">zero_carry_write_enable</a>; <span class=C>///< Zero/Carry update</span><a name="104"></a><span class=K>wire</span> <a onClick="return qs(event,this,22)" class=SW href="#246">internal_reset</a>; <span class=C>///< Internal reset signal</span><a name="105"></a><span class=K>wire</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#73">code_depth</a>-1:0] <a onClick="return qs(event,this,23)" class=SW href="#268">program_counter_source</a>, <a onClick="return qs(event,this,24)" class=SW href="#274">program_counter_next</a>; <span class=C>///< Next program counter logic</span><a name="106"></a><span class=K>wire</span> <a onClick="return qs(event,this,25)" class=SW href="#251">conditional_match</a>; <span class=C>///< True when unconditional or flags match</span><a name="107"></a><span class=K>wire</span> <a onClick="return qs(event,this,26)" class=SW href="#280">interrupt_assert</a>; <span class=C>///< True when interrupt condition is met</span><span class=C>/* IDU - Instruction Decode Unit */</span><a name="111"></a><span class=K>wire</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,27)" class=SW href="#111">idu_operation</a>;<a name="112"></a><span class=K>wire</span> [2:0] <a onClick="return qs(event,this,28)" class=SW href="#112">idu_shift_operation</a>;<a name="113"></a><span class=K>wire</span> <a onClick="return qs(event,this,29)" class=SW href="#113">idu_shift_direction</a>, <a onClick="return qs(event,this,30)" class=SW href="#113">idu_shift_constant</a>;<a name="114"></a><span class=K>wire</span> <a onClick="return qs(event,this,31)" class=SW href="#114">idu_operand_selection</a>;<a name="115"></a><span class=K>wire</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#110">register_depth</a>-1:0] <a onClick="return qs(event,this,32)" class=SW href="#115">idu_x_address</a>, <a onClick="return qs(event,this,33)" class=SW href="#115">idu_y_address</a>;<a name="116"></a><span class=K>wire</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#60">operand_width</a>-1:0] <a onClick="return qs(event,this,34)" class=SW href="#116">idu_implied_value</a>;<a name="117"></a><span class=K>wire</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#82">port_depth</a>-1:0] <a onClick="return qs(event,this,35)" class=SW href="#117">idu_port_address</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="119"></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,36)" class=SW href="#119">idu_scratch_address</a>;<span class=M>`endif</span><a name="121"></a><span class=K>wire</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#73">code_depth</a>-1:0] <a onClick="return qs(event,this,37)" class=SW href="#121">idu_code_address</a>;<a name="122"></a><span class=K>wire</span> <a onClick="return qs(event,this,38)" class=SW href="#122">idu_conditional</a>;<a name="123"></a><span class=K>wire</span> [1:0] <a onClick="return qs(event,this,39)" class=SW href="#123">idu_condition_flags</a>;<a name="124"></a><span class=K>wire</span> <a onClick="return qs(event,this,40)" class=SW href="#124">idu_interrupt_enable</a>;<span class=M>`ifdef</span> <a onClick="return qs(event,this,0)" class=D href="pacoblaze_idu_tb.v.html#36">HAS_DEBUG</a><span class=K>wire</span> [8*<span class=D>`idu_debug_width</span>:1] idu_debug;<span class=K>wire</span> [8*<span class=D>`alu_debug_width</span>:1] alu_debug;<span class=M>`endif</span><span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze1.v.html#13">PACOBLAZE_IDU</a> idu( <a onClick="return qs(event,this,2)" class=SI href="#72">instruction</a>, <a onClick="return qs(event,this,27)" class=SW href="#111">idu_operation</a>, <a onClick="return qs(event,this,28)" class=SW href="#112">idu_shift_operation</a>, <a onClick="return qs(event,this,29)" class=SW href="#113">idu_shift_direction</a>, <a onClick="return qs(event,this,30)" class=SW href="#113">idu_shift_constant</a>, <a onClick="return qs(event,this,31)" class=SW href="#114">idu_operand_selection</a>, <a onClick="return qs(event,this,32)" class=SW href="#115">idu_x_address</a>, <a onClick="return qs(event,this,33)" class=SW href="#115">idu_y_address</a>, <a onClick="return qs(event,this,34)" class=SW href="#116">idu_implied_value</a>, <a onClick="return qs(event,this,35)" class=SW href="#117">idu_port_address</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,36)" class=SW href="#119">idu_scratch_address</a>,<span class=M>`endif</span> <a onClick="return qs(event,this,37)" class=SW href="#121">idu_code_address</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>, <a onClick="return qs(event,this,40)" class=SW href="#124">idu_interrupt_enable</a><span class=M>`ifdef</span> <a onClick="return qs(event,this,0)" class=D href="pacoblaze_idu_tb.v.html#36">HAS_DEBUG</a> , idu_debug<span class=M>`endif</span>);<span class=C>/* ALU - Arithmetic-Logic Unit */</span><a name="151"></a><span class=K>wire</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#60">operand_width</a>-1:0] <a onClick="return qs(event,this,41)" class=SW href="#151">alu_result</a>, <a onClick="return qs(event,this,42)" class=SW href="#291">alu_operand_a</a>, <a onClick="return qs(event,this,43)" class=SW href="#292">alu_operand_b</a>;<a name="152"></a><span class=K>wire</span> <a onClick="return qs(event,this,44)" class=SW href="#152">alu_zero_out</a>, <a onClick="return qs(event,this,45)" class=SW href="#152">alu_carry_out</a>;<span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span><span class=K>wire</span> [<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#60">operand_width</a>-1:0] alu_resultw, alu_operand_u, alu_operand_v;<span class=M>`endif</span><span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze1.v.html#14">PACOBLAZE_ALU</a> alu( <a onClick="return qs(event,this,27)" class=SW href="#111">idu_operation</a>, <a onClick="return qs(event,this,28)" class=SW href="#112">idu_shift_operation</a>, <a onClick="return qs(event,this,29)" class=SW href="#113">idu_shift_direction</a>, <a onClick="return qs(event,this,30)" class=SW href="#113">idu_shift_constant</a>, <a onClick="return qs(event,this,41)" class=SW href="#151">alu_result</a>, <a onClick="return qs(event,this,42)" class=SW href="#151">alu_operand_a</a>, <a onClick="return qs(event,this,43)" class=SW href="#151">alu_operand_b</a>,<span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span> alu_resultw, alu_operand_u, alu_operand_v,<span class=M>`endif</span> <a onClick="return qs(event,this,15)" class=SR href="#93">carry</a>, <a onClick="return qs(event,this,44)" class=SW href="#152">alu_zero_out</a>, <a onClick="return qs(event,this,45)" class=SW href="#152">alu_carry_out</a><span class=M>`ifdef</span> <a onClick="return qs(event,this,0)" class=D href="pacoblaze_idu_tb.v.html#36">HAS_DEBUG</a> , alu_debug<span class=M>`endif</span>);<a name="170"></a><span class=K>wire</span> <a onClick="return qs(event,this,46)" class=SW href="#170">is_alu</a> = <span class=C>// `operation_is(`op_load)</span> <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#477">op_and</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#478">op_or</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#482">op_xor</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#475">op_add</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#476">op_addcy</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#480">op_sub</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#481">op_subcy</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#479">op_rs</a>)<span class=M>`ifdef</span> <a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#42">HAS_COMPARE_OPERATION</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#490">op_compare</a>)<span class=M>`endif</span><span class=M>`ifdef</span> <a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#43">HAS_TEST_OPERATION</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#491">op_test</a>)<span class=M>`endif</span><span class=M>`ifdef</span> <span class=D>HAS_MUL_OPERATION</span> || <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_alu.v.html#43">operation_is</a>(<span class=D>`op_mul</span>)<span class=M>`endif</span><span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span> ||<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_alu.v.html#43">operation_is</a>(<span class=D>`op_addw</span>) ||<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_alu.v.html#43">operation_is</a>(<span class=D>`op_addwcy</span>) ||<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_alu.v.html#43">operation_is</a>(<span class=D>`op_subw</span>) ||<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_alu.v.html#43">operation_is</a>(<span class=D>`op_subwcy</span>)<span class=M>`endif</span> ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -