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

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

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

ContractedBlock.gif ExpandedBlockStart.gif 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如下

ContractedBlock.gif ExpandedBlockStart.gif 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语言

ContractedBlock.gif ExpandedBlockStart.gif 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 逻辑移位电路

代码如下

ContractedBlock.gif ExpandedBlockStart.gif 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,算术移位最高位填充的是符号位。

转载于:https://www.cnblogs.com/yuesheng/archive/2011/08/01/2124168.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值