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">&quot;pacoblaze_inc.v&quot;</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>///&lt; Main operation</span><span class=K>input</span> [2:0] shift_operation; <span class=C>///&lt; Rotate/shift operation</span><span class=K>input</span> shift_direction; <span class=C>///&lt; Rotate/shift left(0)/right(1)</span><span class=K>input</span> shift_constant; <span class=C>///&lt; 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>///&lt; 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>///&lt; 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>///&lt; 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>///&lt; wide ALU high operands</span><span class=M>`endif</span><span class=K>input</span> carry_in; <span class=C>///&lt; Carry in</span><span class=K>output</span> zero_out; <span class=C>///&lt; Zero out</span><span class=K>output</span> <span class=K>reg</span> carry_out; <span class=C>///&lt; 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>///&lt; ALU debug string</span><span class=K>reg</span> [18*8:1] debug_rabc; <span class=C>///&lt; ALU debug operands and result</span><span class=K>reg</span> [7*8:1] debug_cz; <span class=C>///&lt; 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 =&gt; 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 =&gt; 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(&quot;op:%b %h (%h)=(%h),(%h)&quot;, operation, operation, result, operand_a, operand_b);  $display(&quot;as:%h=%h+%h+%b&quot;, 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 &amp; 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 &amp; 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">&quot;pacoblaze_util.v&quot;</a><span class=K>always</span> @(operand_a, operand_b, result)  debug_rabc = {<span class=S>&quot;r=&quot;</span>, numtohex(result[7:4]), numtohex(operand_a[3:0]), <span class=S>&quot; a=&quot;</span>, numtohex(operand_a[7:4]), numtohex(operand_a[3:0]), <span class=S>&quot; b=&quot;</span>, numtohex(operand_b[7:4]), numtohex(operand_b[3:0]), <span class=S>&quot; c=&quot;</span>, numtohex(carry_in)};<span class=K>always</span> @(carry_in, carry_out, zero_out)  debug_cz = {<span class=S>&quot;C=&quot;</span>, numtohex(carry_out), <span class=S>&quot; Z=&quot;</span>, numtohex(zero_out)};<span class=K>always</span> @(debug_rabc, debug_cz)  debug = {debug_rabc, <span class=S>&quot;, &quot;</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 + -
显示快捷键?