首页 > 编程知识 正文

verilog实现一位全加器,eda半加器程序

时间:2023-05-05 14:43:32 阅读:156939 作者:3505

半加法器:用于计算两个一位数的二进制加法,与低位进位无关。

)1)这里,假设a和b是输入信号,cout是输出信号,sum是加法信号

)2)那么,这些真值表可以表示如下

~~~~加数a加数b进位cout和数sum

根据真值表,输入输出关系(逻辑结构)如下。

cout=a^b(a (表示a异或b )也就是(a ) b ) b ) a ) )

sum=ab(a (表示a和b,即and ) sum,a,b ) ) )

)3)以下,分为结构描述、动作描述、数据流描述来写半身份的源代码

在此之前,请参考微信公众号“空谷小莜蓝”获取Vivado的安装说明和使用说明

我们创建的新项目名为“half_add”。 我们先来看看结构说明。 在Design Sources中创建新的模拟文件“half_add1”,在Simulation Sources中创建新的测试文件“tb_half_add1”

half_add1中写入的源代码是:

module half_add1

输入a、b、

output cout,sum

开始在/模块中声明输入信号。 a、b和输出信号cout和sum/

);

//开始说明结构,操作关键词(输出、输入1、输入2、…输入n ) ) ) ) )。

xor(cout,a,b );

and(sum,a,b );

//上面的两行分别表示,a和b取异或后传递给cout,a和b进行与运算后传递给sum

结束模块

测试文件的源代码为:

在tb_half_add1中:

module tb_half_add1(; reg Ain,xwdsh;//定义2个寄存器型测试信号Ain和xwdshreg clk//clk为时钟wire sum1、cout1;//声明两个线网型的信号sum1和cout1initial begin//#表示延迟,在开始时电流可能会稍微不稳定。 最后Ain和xwdsh表示信号的初始化#1Ain=0。 xwdsh=0; clk=0; endalways #5 clk=~clk; //此#5也表示五个周期的延迟,always可用于组合逻辑和时序逻辑。 clk=~clk在某些情况下必须延迟。 否则,就会变成“死锁”,表示时间序列逻辑。 信号会在这里停留五个周期。 always@(posedgeclk(/表示触发条件为边缘触发begin//)的xwdsh={$random} % 2; endhalf_add1U1(ain,xwdsh,sum1,cout1); //这是调用方的仿真文件,因为这里是顺序对应的,所以如果像. A(A )那样写在endmodule 下面,就可以在Vivado中进行仿真测试

得到RTL电路图:

和模拟波形图:

)4)行为描述

创建的模拟文件和测试文件分别为half_add2和tb_half_add2

模拟文件代码为:

modulehalf_add2(inputa,b,output cout,sum ); reg sum,cout; always@(aorb ) begincase(a,b ) ) /表示代表位宽为2的二进制sum=0,例如多分支选择2 ) b003360begin///2) b00; cout=0; end2'b01:beginsum=1; cout=0; end2'b10:beginsum=1; cout=0; end2'b11:beginsum=0; cout=1; endendcaseendendmodule 测试文件代码如下。

module tb_half_add2(; reg Ain,xwdsh; reg clk; //时钟wire sum2,cout2; initialbegin#1Ain=0; xwdsh=0; clk=0; endalways #5 clk=~clk; Always@(Posedgeclk ) beginAin={$random} % 2; xwdsh={$random} % 2; endhalf_add2hadder2(ain,xwdsh,sum2,cout2); 端模模拟波形图为:

RTL电路图是:

)5)数据流说明:

创建的模拟文件和测试文件分别为half_add3和tb_half_add3

模拟文件的源代码为:

modulehalf_add3(inputa,b,output sum,cout ); assign sum=a^b; assign cout=ab; endmodule 测试文件的源代码如下:

module tb_half_add3(; reg Ain,xwdsh; reg clk; wire sum3,cout3; initialbegin#1Ain=0; xwdsh=0; clk=0; endalways #5 clk=~clk; Always@(Posedgeclk ) beginAin={$random}%2; xwdsh={$random}%2; endhalf_add3U3(ain,xwdsh,sum,cout ); 端模模拟波形图为:

RTL电路图是:

然而,该RTL电路图可能不完全相同,但模拟结果却完全相同

认为会正文的学生请关注微信公众号“空谷小莜蓝”。 我相信后期的微信公众号会越来越容易看到。 谢谢~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。