加法器

使用环境:Quartus II 8.0 + DE2(Cyclone II EP2C35F627C6)

1、半加器:

代码:

 

ContractedBlock.gifExpandedBlockStart.gifhalf_adder
1 module half_adder(ina,inb,sum_out,carry_out,clk,rst);
2
3  input ina;
4  input inb;
5  input clk;
6  input rst;
7
8  output sum_out;
9  output carry_out;
10
11  reg sum_out;
12  reg carry_out;
13
14  always @(posedge clk or negedge rst)
15  begin
16 if(!rst)
17 begin
18 sum_out <= 1'b0;
19   carry_out <= 1'b0;
20   end
21 else
22 begin
23 sum_out <= ina^inb;
24 carry_out <= ina&inb;
25 end
26 end
27 endmodule

综合后的RTL视图:

2011051719142793.gif

仿真波形图:

2011051720091143.jpg  

小结:半加器最后输出经过了一级D触发器。注意:组合电路要考虑门电路的传输延迟时间,以及由此引起的竞争。

我们把门电路两个输入信号同时向相反的逻辑电平跳变(一个从1变为0,另一个从0变为1)的现象叫做竞争。消除竞争—冒险现象的方法有

a、接入滤波电容。b、引入选通脉冲。 c、修改逻辑设计

2、全加器

全加器和半加器的区别在于全家器多了一个进位输入端。

组合逻辑代码:

ContractedBlock.gifExpandedBlockStart.giffull_adder
1 module full_adder(ina,inb,carry_in,sum_out,carry_out);
2
3 input ina;
4 input inb;
5 input carry_in;
6
7 output sum_out;
8 output carry_out;
9
10 //combinational logic
11
12 assign sum_out = (ina^inb)^carry_in;
13 assign carry_out = (ina&inb)|((ina^inb)&carry_in);
14
15 endmodule

综合后的RTL视图:

2011051719411437.gif

时序逻辑实现代码:

ContractedBlock.gifExpandedBlockStart.giffull_adder_seq
module half_adder(ina,inb,carry_in,sum_out,carry_out,clk,rst);

input ina;
input inb;
input carry_in;
input clk;
input rst;

output sum_out;
output carry_out;

reg sum_out;
reg carry_out;

//second method: sequential logic
always @(posedge clk or negedge rst)
begin
if(!rst)
begin
sum_out
<= 1'b0;
carry_out <= 1'b0;
end
else
begin
sum_out
<= (ina^inb)^carry_in;
carry_out
<= (ina&inb)|((ina^inb)&carry_in);
end
end

endmodule

综合后的RTL视图:

2011051719553455.gif




  


  

转载于:https://www.cnblogs.com/dpc525/archive/2011/05/17/2049217.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值