pacoblaze_alu.v.html
来自「和picoblaze完全兼容的mcu ip core」· HTML 代码 · 共 519 行 · 第 1/2 页
HTML
519 行
*/</span><span class=M>`ifndef</span> <a onClick="return qs(event,this,0)" class=D href="#34">PACOBLAZE_ALU_V_</a><span class=M>`define</span> <a onClick="return qs(event,this,0)" class=D href="#34">PACOBLAZE_ALU_V_</a><span class=M>`include</span> <a onClick="return qs(event,this,0)" class=S href="pacoblaze_inc.v.html">"pacoblaze_inc.v"</a><span class=M>`ifdef</span> <span class=D>USE_ONEHOT_ENCODING</span><span class=M>`define</span> <a onClick="return qs(event,this,0)" class=D href="pacoblaze_idu.v.html#44">operation</a>(x) operation[(x)]<span class=M>`define</span> <a onClick="return qs(event,this,0)" class=D href="#43">operation_is</a>(x) operation[(x)]<span class=M>`else</span><span class=M>`define</span> <a onClick="return qs(event,this,0)" class=D href="pacoblaze_idu.v.html#44">operation</a>(x) (x)<span class=M>`define</span> <a onClick="return qs(event,this,0)" class=D href="#43">operation_is</a>(x) (operation == (x))<span class=M>`endif</span><span class=K>module</span> <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze1.v.html#14">PACOBLAZE_ALU</a>( operation, shift_operation, shift_direction, shift_constant, result, operand_a, operand_b,<span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span> resultw, operand_u, operand_v,<span class=M>`endif</span> carry_in, zero_out, carry_out<span class=M>`ifdef</span> <a onClick="return qs(event,this,0)" class=D href="pacoblaze_idu_tb.v.html#36">HAS_DEBUG</a> , debug<span class=M>`endif</span>);<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] operation; <span class=C>///< Main operation</span><span class=K>input</span> [2:0] shift_operation; <span class=C>///< Rotate/shift operation</span><span class=K>input</span> shift_direction; <span class=C>///< Rotate/shift left(0)/right(1)</span><span class=K>input</span> shift_constant; <span class=C>///< Shift constant (0 or 1)</span><span class=K>output</span> <span class=K>reg</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] result; <span class=C>///< ALU result</span><span class=K>input</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] operand_a, operand_b; <span class=C>///< ALU operands</span><span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span><span class=K>output</span> <span class=K>reg</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] resultw; <span class=C>///< wide ALU high result</span><span class=K>input</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] operand_u, operand_v; <span class=C>///< wide ALU high operands</span><span class=M>`endif</span><span class=K>input</span> carry_in; <span class=C>///< Carry in</span><span class=K>output</span> zero_out; <span class=C>///< Zero out</span><span class=K>output</span> <span class=K>reg</span> carry_out; <span class=C>///< Carry out</span><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>output</span> <span class=K>reg</span> [8*<span class=D>`alu_debug_width</span>:1] debug; <span class=C>///< ALU debug string</span><span class=K>reg</span> [18*8:1] debug_rabc; <span class=C>///< ALU debug operands and result</span><span class=K>reg</span> [7*8:1] debug_cz; <span class=C>///< ALU debug flags</span><span class=M>`endif</span><span class=C>/** Adder/substracter second operand. */</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] addsub_b = (<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#43">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="#43">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=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="#43">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> ) ? ~operand_b : operand_b;<span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span><span class=K>wire</span> [2*<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#60">operand_width</a>-1:0] addsubw_b = (<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#43">operation_is</a>(<span class=D>`op_subw</span>) || <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#43">operation_is</a>(<span class=D>`op_subwcy</span>)) ? ~{operand_v, operand_b} : {operand_v, operand_b};<span class=M>`endif</span><span class=C>/** Adder/substracter carry. */</span><span class=K>wire</span> addsub_carry = (<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#43">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=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span> || <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#43">operation_is</a>(<span class=D>`op_addwcy</span>)<span class=M>`endif</span> ) ? carry_in : (<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#43">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=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="#43">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> <span class=D>HAS_WIDE_ALU</span> || <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#43">operation_is</a>(<span class=D>`op_subw</span>)<span class=M>`endif</span> ) ? 1 : <span class=C>// ~b => b'</span> (<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#43">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=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span> || <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#43">operation_is</a>(<span class=D>`op_subwcy</span>)<span class=M>`endif</span> ) ? ~carry_in : <span class=C>// ~b - c => b' - c</span> 0;<span class=C>/** Adder/substracter with carry. */</span><span class=K>wire</span> [1+<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#60">operand_width</a>-1:0] addsub_result = operand_a + addsub_b + addsub_carry;<span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span><span class=K>wire</span> [1+2*<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#60">operand_width</a>-1:0] addsubw_result = {operand_u, operand_a} + addsubw_b + addsub_carry;<span class=M>`endif</span><span class=C>/** Shift bit value. */</span><span class=C>// synthesis parallel_case full_case</span><span class=K>wire</span> shift_bit = (shift_operation == <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#220">opcode_rr</a>) ? operand_a[0] : <span class=C>// == `opcode_slx</span> (shift_operation == <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#222">opcode_rl</a>) ? operand_a[7] : <span class=C>// == `opcode_srx</span> (shift_operation == <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#219">opcode_rsa</a>) ? carry_in : shift_constant; <span class=C>// == `opcode_rsc</span><span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span><span class=K>wire</span> [2*<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#60">operand_width</a>-1:0] resultx = {resultw, result};<span class=M>`endif</span><span class=K>assign</span> zero_out =<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="#43">operation_is</a>(<span class=D>`op_mul</span>)) ? ~|resultx :<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="#43">operation_is</a>(<span class=D>`op_addw</span>) || <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#43">operation_is</a>(<span class=D>`op_addwcy</span>) || <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#43">operation_is</a>(<span class=D>`op_subw</span>) || <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#43">operation_is</a>(<span class=D>`op_subwcy</span>) ) ? ~|resultx :<span class=M>`endif</span> ~|result;<span class=C>/*always @(operation, shift_operation, shift_direction, shift_constant, shift_bit, result, operand_a, operand_b, carry_in, carry_out, addsub_result, addsub_b, addsub_carry`ifdef HAS_WIDE_ALU , resultw, operand_v, addsubw_result`endif ) begin $display("op:%b %h (%h)=(%h),(%h)", operation, operation, result, operand_a, operand_b); $display("as:%h=%h+%h+%b", addsub_result, operand_a, addsub_b, addsub_carry);end*/</span><span class=C>// always @*</span><span class=K>always</span> @(operation, shift_operation, shift_direction, shift_constant, shift_bit, result, operand_a, operand_b, carry_in, carry_out, addsub_result, addsub_carry<span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span> , resultw, operand_v, addsubw_result<span class=M>`endif</span> ) <span class=K>begin</span>: on_alu <span class=C>/* Defaults */</span> carry_out = 0;<span class=M>`ifdef</span> <span class=D>HAS_WIDE_ALU</span> resultw = operand_v;<span class=M>`endif</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> (operation)<span class=M>`endif</span> <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#42">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="#42">operation</a>(<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#476">op_addcy</a>): {carry_out, result} = addsub_result;<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="#42">operation</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=D>`</span><a onClick="return qs(event,this,0)" class=D href="#42">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="#42">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=K>begin</span> {carry_out, result} = {~addsub_result[8], addsub_result[7:0]}; <span class=K>end</span> <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#42">operation</a>(<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#477">op_and</a>): result = operand_a & operand_b; <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#42">operation</a>(<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#478">op_or</a>): result = operand_a | operand_b;<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="#42">operation</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=K>begin</span> result = operand_a & operand_b; carry_out = ^result; <span class=K>end</span><span class=M>`endif</span> <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#42">operation</a>(<span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_inc.v.html#482">op_xor</a>): result = operand_a ^ operand_b; <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="#42">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>if</span> (shift_direction) <span class=C>// shift right</span> {result, carry_out} = {shift_bit, operand_a}; <span class=K>else</span> <span class=C>// shift left</span> {carry_out, result} = {operand_a, shift_bit};<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_idu.v.html#44">operation</a>(<span class=D>`op_mul</span>): {resultw, result} = operand_a * operand_b;<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_idu.v.html#44">operation</a>(<span class=D>`op_addw</span>), <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_idu.v.html#44">operation</a>(<span class=D>`op_addwcy</span>): {carry_out, resultw, result} = addsubw_result; <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_idu.v.html#44">operation</a>(<span class=D>`op_subw</span>), <span class=D>`</span><a onClick="return qs(event,this,0)" class=D href="pacoblaze_idu.v.html#44">operation</a>(<span class=D>`op_subwcy</span>): {carry_out, resultw, result} = {~addsubw_result[16], addsubw_result[15:0]};<span class=M>`endif</span> <span class=K>default</span>: result = operand_b; <span class=K>endcase</span><span class=K>end</span><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=M>`include</span> <a onClick="return qs(event,this,0)" class=S href="pacoblaze_util.v.html">"pacoblaze_util.v"</a><span class=K>always</span> @(operand_a, operand_b, result) debug_rabc = {<span class=S>"r="</span>, numtohex(result[7:4]), numtohex(operand_a[3:0]), <span class=S>" a="</span>, numtohex(operand_a[7:4]), numtohex(operand_a[3:0]), <span class=S>" b="</span>, numtohex(operand_b[7:4]), numtohex(operand_b[3:0]), <span class=S>" c="</span>, numtohex(carry_in)};<span class=K>always</span> @(carry_in, carry_out, zero_out) debug_cz = {<span class=S>"C="</span>, numtohex(carry_out), <span class=S>" Z="</span>, numtohex(zero_out)};<span class=K>always</span> @(debug_rabc, debug_cz) debug = {debug_rabc, <span class=S>", "</span>, debug_cz};<span class=M>`endif</span> <span class=C>// HAS_DEBUG</span><span class=K>endmodule</span><span class=M>`endif</span> <span class=C>// PACOBLAZE_ALU_V_</span></pre><center><table class=NB cols=7 ><tr><td align="center" width="14%" onmousedown="this.style.border='inset';" onmouseup="this.style.border='outset';" onclick="location='index.html';"><a target="_top" href="index.html">Hierarchy</a></td><td align="center" width="14%" onmousedown="this.style.border='inset';" onmouseup="this.style.border='outset';" onclick="location='index-f.html';"><a target="_top" href="index-f.html">Files</a></td><td align="center" width="14%" onmousedown="this.style.border='inset';" onmouseup="this.style.border='outset';" onclick="location='index-m.html';"><a target="_top" href="index-m.html">Modules</a></td><td align="center" width="14%" onmousedown="this.style.border='inset';" onmouseup="this.style.border='outset';" onclick="location='index-s.html';"><a target="_top" href="index-s.html">Signals</a></td><td align="center" width="14%" onmousedown="this.style.border='inset';" onmouseup="this.style.border='outset';" onclick="location='index-t.html';"><a target="_top" href="index-t.html">Tasks</a></td><td align="center" width="14%" onmousedown="this.style.border='inset';" onmouseup="this.style.border='outset';" onclick="location='index-fn.html';"><a target="_top" href="index-fn.html">Functions</a></td><td align="center" width="14%" onmousedown="this.style.border='inset';" onmouseup="this.style.border='outset';" onclick="location='http://www.burbleland.com/v2html/help_7_30.html?htf-ni-s-';"><a target="_top" href="http://www.burbleland.com/v2html/help_7_30.html?htf-ni-s-">Help</a></td></tr></table></center><script language="JavaScript"type="text/javascript"><!--function next_page() { return ""; }function first_page() { return ""; }var extra_info = [[]];disabled=0;// --></script><hr><table> <tr><td><i>This page:</i></td> <td><i>Maintained by:</i></td> <td><i><a href="mailto:pablo.N@SPAM.bleyer.org"> pablo.N@SPAM.bleyer.org</a></i></tr><tr><td> </td> <td><i>Created:</i></td><td><i>Tue May 29 02:37:53 2007</i></td></tr><tr> <td> </td> <td><i>From:</i></td><td><i> <a href="pacoblaze_alu.v">pacoblaze_alu.v</a></i></td></tr></table><hr><table width="100%"><tr><td><i>Verilog converted to html by <a target="_top" href="http://www.burbleland.com/v2html/v2html.html"> v2html 7.30</a> (written by <a href="mailto:v2html730@burbleland.com">Costas Calamvokis</a>).</i></td><td align="right"><b><a href="http://www.burbleland.com/v2html/help_7_30.html?htf-ni-s-">Help</a></b></td></tr></table><table height="90%"><tr><td></td></tr></table></body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?