赞
踩
module top_compare( input I_sys_clk, input I_reset_n, input [3:0] I_a , input [3:0] I_b , output reg O_greater, output reg O_less , output reg O_equal ); always @(posedge I_sys_clk or negedge I_reset_n) begin if(~I_reset_n) begin O_greater <= 1'b0; O_less <= 1'b0; O_equal <= 1'b0; end else begin O_greater <= (I_a > I_b); O_less <= (I_a < I_b); O_equal <= (I_a == I_b); end end endmodule
当数据位宽较小,比如为4位时,直接用LUT实现:
原理比较简单,纯纯的查表。
当数据位宽较大,比如位8位时,使用LUT和Carry Logic实现:
以判断 I_a > I_b 为例,总共使用8个LUT4。
第1个LUT输入 I_a[6]、I_b[6]、I_b[7]、I_a[7] ,不管其他位,如果这几位可以判断出 I_a > I_b (比如 I_a[7] = 1 且 I_b[7] = 0)则输出1,否则输出0。
第2个LUT判断 I_a[4]、I_b[4]、I_b[5]、I_a[5] 。
第3个LUT判断 I_a[2]、I_b[2]、I_b[3]、I_a[3] 。
第4个LUT判断 I_a[0]、I_b[0]、I_b[1]、I_a[1] 。
以上4个LUT的输出对应carry logic的进位生成输入DI。
第5个LUT输入 I_a[6]、I_b[6]、I_b[7]、I_a[7] ,如果 I_a[6] = I_b[6] 且 I_a[7] = I_b[7] ,则输出1,否则输出0。
同理其他LUT判断剩余bit。
以上4个LUT的输出对应carry logic的进位传送输入S。
我们知道,carry logic的CO输出为:
{
C
O
=
D
I
,
S
=
0
C
O
=
C
I
,
S
=
1
D
I
与
C
I
不
同
时
取
1
\left\{
又有进位链的CYINIT接地,也就是说,判断的逻辑为:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。