1组合逻辑电路--算术运算电路

1.4.1 +、-、*、/、%电路

(1)加法电路:每1位大约消耗1个LE,示例代码如下

View Code
 1 module arithmetic
2 (
3 input [7:0] iA,
4 input [7:0] iB,
5 output [8:0] oAdd
6 );
7
8 assign oAdd=iA+iB;
9
10 endmodule

RTL级视图如下

testbench如下

View Code
 1 `timescale 1ns/1ns
2 module arithmetic_tb;
3
4 reg [7:0] ia=8'b1011_0111;
5 reg [7:0] ib=8'b0100_1000;
6 wire [8:0] oadd;
7
8 initial #100 $stop;
9
10 arithmetic arithmetic_inst
11 (
12 .iA(ia),
13 .iB(ib),
14 .oAdd(oadd)
15 );
16
17 endmodule

仿真波形如下

(2)乘法电路

代码将加法电路代码中语句oAdd=iA+iB;改为  oMul=iA*iB;即可。oMul位宽为[15:0]

代码综合后乘法单元直接调用的CycloneII嵌入式乘法器lpm_mult

RTL级视图

仿真波形图


 (3)除法电路

代码将加法电路代码中语句oAdd=iA+iB;改为  oDiv=iA/iB;即可。oDiv位宽为[7:0]

代码综合后除法单元直接调用的lpm_divide实现的

取余运算也很消耗资源,每位运算大约消耗10LE.

RTL级视图如下

RTL级波形仿真

(4)取余运算

代码将加法电路代码中语句oAdd=iA+iB;改为  oMod=iA%iB;即可。oMod位宽为[7:0]

代码综合后取余运算直接调用的lpm_divide实现的

除法运算很消耗资源,每位运算大约消耗10LE.

RTL级视图如下

RTL级波形仿真

1.4.2 数据比较器

代码如下,风格非常类似C语言

View Code
 1 module arithmetic
2 (
3 input [3:0] iA,
4 input [3:0] iB,
5 output oEQ,
6 output oGT,
7 output oLT,
8 output oGT_EQ,
9 output oLT_EQ,
10 output oNEQ
11 );
12
13 assign oEQ=(iA==iB),
14 oNEQ=(iA!=iB),
15 oGT=(iA>iB),
16 oLT=(iA<iB),
17 oGT_EQ=(iA>=iB),
18 oLT_EQ=(iA<=iB);
19 endmodule

RTL级视图如下

RTL级仿真波形如下

1.4.3 移位电路

1.4.3.1 逻辑移位电路

代码如下

View Code
 1 module arithmetic
2 (
3 input [7:0] iA,
4 input [3:0] iBit,
5 output [7:0] osll,
6 output [7:0] osrl
7 );
8
9 assign osll=iA<<iBit,
10 osrl=iA>>iBit;
11 endmodule

RTL级视图如下

RTL级仿真波形

1.4.3.2 算术移位

算术移位运算符为<<<,>>>;

有符号数算术移位和逻辑移位,两者左移时一样,右移时逻辑移位最高位填充的是0,算术移位最高位填充的是符号位。

posted on 2011-08-01 18:24  万好好  阅读(940)  评论(0编辑  收藏  举报

导航