HDLBits(9)10.13

1|02 Verilog语言

1|12.5 更多特点

1|02.5.4 组合for循环

翻转输出一个长度为100的向量(使用组合always块)

module top_module( input [99:0] in, output [99:0] out ); integer i; always@(*)begin for (int i=0;i<=99;i=i+1)begin out[i]=in[99-i]; end end endmodule

1|02.5.5 组合for循环:255位总体计数

建立一个255bit输入的矢量来判断输入中 ’1‘ 的个数

module top_module( input [254:0] in, output [7:0] out ); integer i; always @ (*) begin out = 8'b0000_0000; //为了后面的计数累加,此处先初始化为0. for (i=0; i<255; i++) begin if(in[i] == 1'b1) out = out + 1'b1; else out = out; end end endmodule
module top_module( input [254:0] in, output [7:0] out ); integer i; always @(*)begin out = 8'd0; for(i=0;i<255;i=i+1) out=in[i]?out+8'd1:out; end endmodule

1|02.5.6 生成for循环:100位二进制加法器

通过实例化100个全加器来创建一个100位二进制波纹进位加法器。加法器将两个 100 位数字和一个进位相加,产生一个 100 位和并执行。为了鼓励您实际实例化全加器,还要输出纹波进位加法器中每个全加器的进位。cout[99] 是最后一个全加器的最终进位,也是通常看到的进位。

module top_module( input [99:0] a, b, input cin, output [99:0] cout, output [99:0] sum ); genvar i; generate for(i=0;i<100;i++) begin:adder if(i==0) assign {cout[0],sum[0]} = a[0]+b[0]+cin; else assign {cout[i],sum[i]} = a[i]+b[i]+cout[i-1]; end endgenerate endmodule

generate语句:

 

1|02.5.6 生成for循环:100位BCD加法器

本题已经提供了一个名为bcd_fadd的BCD一位全加器,他会添加两个BCD码和一个cin,并产生一个cout和sum。

module bcd_fadd { input [3:0] a, input [3:0] b, input cin, output cout, output [3:0] sum );

实例化100个bcd_fadd来实现100位的BCD进位加法器。该加法器应包含两个100bit的BCD码(包含在400bit的矢量中)和一个cin, 输出产生sum 和 cout


__EOF__

本文作者LhTian
本文链接https://www.cnblogs.com/LhTian/p/16788472.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   LhTian21  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示