如何加快系统时钟频率(加法器为例)

假设每个1比特加法环节需要处理的时间是5ns(当然,实际的电路如果这么慢,估计我们敲一个字母计算机都得等上一分钟进行处理)。当四个1bit的加法器级联的环节,处理时间就得20ns,换句话说在这20ns时间范围内我们的输入输出不能有变化,否则将会出现问题。 最终,我们采取模块结构的变化及时序控制的引入来解决这个问题。下面是代码:

module adder_4bits_pipeline(

input[3:0]a,b,

input CLK,

input RST,

output[3:0]sum,

output c

);

reg[2:0]i_a1,i_b1;

reg[1:0]i_a2,i_b2;

reg i_a3,i_b3;



reg D_c0,D_c1,D_c2;

reg o_s0;

reg[1:0]o_s1;

reg[2:0]o_s2;





wire s0,s1,s2,s3;

wire c0,c1,c2,c3;

half_adder H0(.a0(a[0]),.a1(b[0]),.s(s0),.c1(c0));

full_adder F1(.a0(i_a1[0]),.a1(i_b1[0]),.c0(D_c0),s(s1),.c1(c1));

full_adder F2(.a0(i_a2[0]),.a1(i_b2[0]),.c0(D_c1),s(s2,.c1(c2)));

full_adder F3(.a0(i_a3),.a1(i_b3),.c0(D_c2),.s(s3),.c1(c));



assign sum={s3,o_s2};

always@(posedge CLK&nbs***bsp;negedge RST)

begin

if(!RST)

begin

i_a1<=3'b000;

i_b1<=3'b000;

end

else begin

i_a1<=a[3:1];

i_b1<=b[3:1];

end

end



always@(posedge CLK&nbs***bsp;negedge RST)

begin

if(!RST)

begin

i_a2<=2'b00;

i_b2<=2'b00;

end

else begin

i_a2<=i_a1[2:1];

i_b2<=i_b1[2:1];

end

end

always@(posedge CLK&nbs***bsp;negedge RST)

begin

if(!RST)

begin

i_a3<=1'b0;

i_b3<=1'b0;

end

else begin

i_a3<=i_a2[1];

i_a3<=i_b2[1];

end

end



always@(posedge CLK&nbs***bsp;negedge RST)

begin

if(!RST)

begin

D_c0<=1'b0;

D_c1<=1'b0;

D_c2<=1'b0;

end

else begin

D_c0<=c0;

D_c1<=c1;

D_c2<=c2;

end

end

always@(posedge CLK&nbs***bsp;negedge RST)

begin

if(!RST)

begin

o_s0<=1'b0;

o_s1<=2'b00;

o_s2<=3'b000;

end

else begin

o_s0<=s0;

o_s1<={s1,o_s0};

o_s2<={s2,o_s1};

end

end

endmodule
喜欢本文的同学欢迎收藏点赞多多留言,本文原发于【FPGA hdl

#笔记##读书笔记#
全部评论
学到了,感谢楼主的分享
点赞 回复 分享
发布于 2022-06-04 23:08

相关推荐

2025-12-28 22:19
门头沟学院 Java
不敢追165女神:简历写得毫无特点,你说你要是大二或者大三找寒假实习到暑期实习这段时间,你的简历还能约到面试。但是你是研究生哥,面试官不会因为你是研究生而降低要求,反而会觉得你是研究生才学了这么一点?为什么我不找个同阶段的本科生?
简历中的项目经历要怎么写
点赞 评论 收藏
分享
2025-12-15 12:50
河北工程大学
sta666:我也是这个国际商业化的,三天,一天一面,就通过了,不过我是后端实习生,好好面感觉能过。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务