四位全加器实验Verilog

更新时间:2023-06-23 11:12:07 阅读: 评论:0

实验四 四位全加器
               
一、实验目的
  l. 用组合电路设计4位全加器。
  2.了解Verilog HDL语言的行为描述的优点。
2、实验原理
4位全加器工作原理
1)全加器
除本位两个数相加外,还要加上从低位来的进位数,称为全加器。被加数Ai、加数Bi从低位向本位进位Ci-1作为电路的输入,全加和Si与向高位的进位Ci络腮胡须作为电路的输出。能实现全加运算功能的电路称为全加电路。全加器的逻辑功能真值表如表中所列。
    21位全加器
    一位全加器(FA)的逻辑表达式为:S=ABCinCo=AB+BCin+ACin
其中A,B为要相加的数,Cin为进位输入;S为和,Co是进位输出;
   
梦见离婚这两幅图略微有差别,但最后的结果是一样的。
34位全加器
4位全加器可看作41位全加器串行构成, 具体连接方法如下图所示:
采用Verilog HDL语言设计该4位全加器,通过主模块调用子模块(1位全加器)的方法来实现。
3、实验步骤
四、实验连线
K1-K4:14-11
K5-K8:18-15
L5-L8:7-10
VIJN:83
L4:6
4KHZ:80
5、心得体会
首先,实现这一段全加器代码并不难,但是由于困惑给的三个时钟输入,没有太懂意思,所以只写了全加器控制LED灯的代码;后来问清楚后,运行全加器代码,有错误,原来是建文件时用的是verilog hdl,我建的是其他类型的;后来还有错,原来是把冒号打成分号;编译成功后,LED不亮,后来发现是硬件老化,换了箱子。这一部分做好后,我准备把控制声音的加上去,本来准备再加一个模块,可是不能有两个顶层块,就对主模块做了补充,用ca命令调用不同的状态,因为时间紧迫,所以代码写得比较简单,没有用经典的分频代码。这里附一小段,是我在研究分频控制时看懂的网上的经典分频代码,适合乐曲自动播放等高级的实现,仅供分享
assign preclk=(divider==16383)?1:0;//divider==16383preclk=1
always @(podge clk)    //基频上升沿触发
begin
if(preclk)                    //preclk=1
divider=origin;
el 
divider=divider+1;
end
always @(podge preclk)    //调整占空比
  begin
speaker=~speaker; //2 分频产生方波信号
  end
这部分实现了分频功能,其中origin+divider=16384=2^14,这个数根据自己的需要而定。
在这个过程中我明白了:
1)细心,每个步骤不能错;
2)出现问题要仔细排查,软硬件都要;
3)注意reg wire的设定;
4)学到了额外的扩展知识
六、代码分析:
module full_add1(SUM,C_OUT,A,B,C_IN);//一位全加器子模块
output SUM,C_OUT;                   
input A,B,C_IN;
wire C1,C2,C3;             
and (C1,A,B);                      //内部门实现
xor (C3,A,B);
and (C2,C3,C_IN);
xor (SUM,C_IN,C3);
linuxor (C_OUT,C1,C2);
endmodule
module shiyan4(speaker,s,c_out,a,b,c_in,clk_4MHz,);//主模块
output [3:0]s;
output c_out;
output speaker;
input clk_4MHz;
input [3:0]a,b;
input c_in;
reg speaker;
wire c1,c2,c3;
full_add1 f0(s[0],c1,a[0],b[0],c_in);//调用子模块(4个一位全加器)
full_add1 f1(s[1],c2,a[1],b[1],c1);
full_add1 f2(s[2],c3,a[2],b[2],c2);
full_add1 f3(s[3],c_out,a[3],b[3],c3);
always @(podge clk_4MHz)        //时钟信号上升沿触发
if(c_out==1)                      //全加器部分进位输出为1的情况
种菠菜的方法
  ca(s)
    4'b0000:  speaker=clk_4MHz; //全加器s0碎纸机扬声器输出的频率
    4'b0001:  speaker=clk_4MHz; //全加器s1扬声器输出的频率
                              (同样目的,以下依次分成不同频率)
    4'b0010:  speaker=clk_4MHz;
    4'b0011:  speaker=clk_4MHz;
    4'b0100:  speaker=2*clk_4MHz;
    4'b0101:  speaker=2*clk_4MHz;
    4'b0110:  speaker=2*clk_4MHz;
    4'b0111:  speaker=2*clk_4MHz;
    4'b1000:  speaker=3*clk_4MHz;
    4'b1001:  speaker=3*clk_4MHz;
    4'b1010:  speaker=3*clk_4MHz;
    4'b1011:  speaker=3*clk_4MHz;
    4'b1100:  speaker=10*clk_4MHz;
    4'b1101:  speaker=10*clk_4MHz;
    4'b1110:  speaker=10*clk_4MHz;
    4'b1111:  speaker=10*clk_4MHz;
    endca
el
可爱的猪图片  ca(s)                            //原时全加器部分进位输出为1负数的初步认识的情况
    4'b0000:  speaker=10000*clk_4MHz;

本文发布于:2023-06-23 11:12:07,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1020671.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:全加器   代码   模块   输出   实现
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图