首页 > 编程知识 正文

数字逻辑基础与verilog设计,verilog代码转化电路图

时间:2023-05-06 18:39:40 阅读:117132 作者:748

【计算机结构原理】用Verilog语言制作32位并行加法器的理解最近,为了完成本学期计算机结构原理课程大工作的要求,开始学习用Verilog语言制作的一组32位并行加法器,提高整个项目运算速度的基本要求考虑到verilog语言与硬件设计的相关性,需要从结构上完成对并行加法器的理解。

32位加法器重视逻辑结构的顺序,本文主要简要介绍加法器的逻辑顺序,并附有代码说明,比较简单。

加法器的结构首先,并行加法器的特征基本上确定其结构,每一位由对应的一位全加法器确定输出结果,且每一位的对应进位输入由超前进位加法器(CLA )在本位运算开始之前计算。

CLA基本功能:输入各位的值,在所有位计算之前计算与所有位对应的进位输入,从而进行所有位计算得到容易输出的值。

整个代码的流程框架如下:

基础-1位全加法器模块add; 4位CLA模块CLA

用高级1-1位全加法器和4位CLA构成4位全加法器

使用高级2-4位CLA模块配置16位CLA模块

使用APP应用程序-16位CLA模块配置32位并行加法器

代码展示和理解以下添加了按逻辑顺序结构组织的32位超前进位加法器的总体代码,语句的基本注释已经附在代码块中。

//设置基础-1位全加法器模块模块模数(x、y、Cin、f、Cout ); input X,y,Cin; 输出f,Cout; assign F=X ^ Y ^ Cin; 分配计数=(x ^ y ) Cin | X Y; 在endmodule //位的全加法器中输入x、y、Cin; 输出f、Cout; //基础-4位超前进位加法器clamodulecla(C0、c1、c2、c3、c4、p1、p2、p3、p4、g1、g2、g3、g4 ); input c0、g1、g2、g3、g4、p1、p2、p3、p4; output c1、c2、c3、c4; //采取直接超前进位方式,完成相应进位的计算。 assign c1=g1 ^ (p1 c0 ),c2=g2 ^ (p2 g1 ) ^ (p2 p1 c0 ), c3=g3 ^ (p3 g2 ) ^ (p3 p2 g1 ) ^ (p3 p2 p1 c0 )结束模块//4位CLA输入基类的基本参数,并输出相应各位类的进位输入值//高级1-1位//4位二进制输入x,y input [4:1] y,用于定义4位加法器模块input [4:1] x; input c0; //设置二进制输入进位c0 output c4、Gm、Pm; //设置二进制输出进位c4 output [4:1] F; //设置二进制输出4位的F wire p1、p2、p3、p4、g1、g2、g3、g4; 设置wire类型的线变量,用于在进程中计算wire c1、c2、c3; //四级完成单位的一个人的全加法器为addadd1(x ) x(1)、 y (y )1)、 CIN (c0 )、 f(1)、 Cout ) ); addadd2).x(x[2], y(y[2], CIN(C1 ), f ), Cout ); addadd3).x(x[3], y ) Y(y[3], CIN(C2 ), f ), Cout ); addadd4(.x ) x[4], y ) Y(y[4], CIN(C3 ), f ), Cout ) ); clacla ).C0(C0 )、 C1 )、 C2 )、 C3 )、 C4 )、 P1 )、 P2 )、 P3 )、 P4 )。 assign p1=x[1] ^ y[1],p2=x[2] ^ y[2],p3=x[3] ^ y[3],p4=x[4] ^ y[4]; assign g1=x[1] y[1],g2=x[2] y[2],g3=x[3] y[3],g4=x[4] y[4]; assign Pm=p1 p2 p3 p4,/pm和Gm分别为进位传递输出和进位发生输出GM=G4^(P4G3 ) P4P3G2) ^ (p4 p3 p2 g1 ); 在最终模块//高级2-4位CLA上设置16位CLA模块modulecla_16(a、b、c0、s、px、gx ); input [16:1] A; input [16:1] B; input c0; output gx,px; output [16:1] S; wire c4、c8、c12; wire Pm1、Gm1、Pm2、Gm2、Pm3、Gm3、Pm4、Gm4; //同样分为4个阶段对对应位数下的累计和进位计算进行add_4add1(.x(a ) 4:1 )、 y ) b ) 4:1 )、 C0 )、 c4 )、 f ) s ) 43:1 add_4add3(.x ) a[12:9], y ) y(B[12:9], C0 ) C8 ), c4 ), f ) F(S[12:9], GM ) GM3 add_4add4(.x(a[16:13], y ) y(B[16:13], C0 ) C12 ), c4 ), f ) F(S[16:13], GM ) assignC4=GM1^(PM1C0),/计算各灰度进位输出取值c8=gm2 ^ (pm2gm1) ^ (Pm2 Pm1 c0 ),c12=gm3 ^ (pm3gm2) ^ (Pm3 Pm2 Gm1) /pm和Gm分别为十六进制传递输出和进位输出GX=GM4^(pm4GM3) ^ ) ^ (Pm4 Pm3 Gm2 ) ^ ) ^ (Pm4 Pm3 Pm2 Gm1 ); 最终模块//高级3-16位CLA直接设置32位clamoduleadd32(a、b、s、C32 )。 input [32:1] A; input [32:1] B; output [33:1] S; output C32; wire px1、gx1、px2、gx2; //将设定中间操作变量wire c16的//32位分成2个16位操作数,带入16位的CLA模块,进行并行计算过程cla_16cla1(.a(a(16:1 ), b ) b(16:1 ) . s )完成16:1 )的cla_16cla2(.a(a ) 32336017 ), b ) 32336017 ), C0 ) C16 ), s ) 32336017 ), 确认//32位输出的进位为c32 S[33]=C32endmodule //32位并行加法器的输入为32位二进制a,b; 最终输出为33位的二进制s (将整体进位合并为二进制,成为第33位);

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