多功能运算电路(verilog HDL虚拟实验)

本文探讨了两个运算电路设计实例,一是利用Verilog HDL实现带控制的加法运算,包括数据取反和加一功能;二是通过与或门逻辑描述复杂的输入输出关系,如加法、减法运算。着重展示了如何通过M1、M2、M0等信号控制运算过程并生成输出结果。
摘要由CSDN通过智能技术生成

一、设计目的

在这里插入图片描述

二、运算电路设计例一

要实现HDL描述的电路图:
在这里插入图片描述
X[3:0]的数据直接传送到a[3:0],M1或M0控制Y[3:0]的数据是否取反.若M1打开,M2打开,M0关闭,这时Y[3:0]中的数据取反加一。
f[3:0]中的数据是a[3:0]与b[3:0]中的数据相加得到的。
该运算器可以实现多种运算功能。

实现代码:

wire M   = S[11];//M2
wire M_0=S[9];
wire M_1=S[10];
//wire M3=S[12];
//wire Cin=S[8];
//wire SR=S[15];
//wire SV=S[14];
//wire SL=S[13];
wire [3:0] X = S[7:4];
wire [3:0] Y = S[3:0];

/************* The logic of this experiment *************/

wire [3:0] A,B,F;
wire C0,M0,M1;
assign M0=M_0;
assign M1=M_1;
assign C0=M;
wire sign, zero, overflow, carryOut;
assign A[3:0]=X[3:0];
assign B[3]=Y[3] &M0 |!Y[3] &M1;
assign B[2]=Y[2] &M0 |!Y[2] &M1;
assign B[1]=Y[1] &M0 |!Y[1] &M1;
assign B[0]=Y[0] &M0 |!Y[0] &M1;

/****** Internal signal assign to output port *******/
assign L[3:0]  = B[3:0];
assign L[7:4]  = A[3:0]; 
assign L[12:9] = F;
assign L[26] = C0; 
assign L[21:18] = {sign, zero, overflow, carryOut};

三、运算器电路设计例二

本例需要用Verilog HDL描述的电路如下所示在这里插入图片描述
按照与或门门关系写出输出a3a2a1a0、b3b2b1b0、C0的表达式
以a3a2a1a0的输出表达式为例可写出如下形式

输入输出表达式
X[3]SR and X[3] or X[3] and SV or SL and X[2]
X[2]SR and X[3] or X[2] and SV or SL and X[1]
X[1]SR and X[2] or X[1] and SV or SL and X[0]
X[1]SR and X[1] or X[0] and SV or SL and 1’b0

可归纳为:
a3a2a1a0 = {4{SR}} & {X[3],X[3],X[2],X[1]} | {X[3],X[3],X[1],X[0]} & {4{SV}} | {4{SL}} & {X[2],X[1],X[0],1’b0}
其中&代表and,|表示or。
同理可得
b3b2b1b0 = {4{M0} & Y[3:0]} |{4{M1}} & !Y[3:0]
真值表:

实现功能功能描述SRSVSLM3M2M1M0
F=0
F=X传送X0100000
F=Y传送Y0000001
F=X+Y加法0100001
F=X-Y减法
F=X+1加1
F=X-1减1
F=X/2右移
F=2X左移
F=X+Y+Cin带进位加法
F=X-Y-Cin带借位减法

实现代码如下

wire M   = S[11];//M2
wire M_0=S[9];
wire M_1=S[10];
wire M3=S[12];
wire Cin=S[8];
wire SR=S[15];
wire SV=S[14];
wire SL=S[13];
wire [3:0] X = S[7:4];
wire [3:0] Y = S[3:0];

/************* The logic of this experiment *************/
wire [3:0] A,B,F;
wire C0,M0,M1;
assign M0=M_0;
assign M1=M_1;
assign C0 = ( Cin & M3 | M);
wire sign, zero, overflow, carryOut;
assign A[3]=SR & X[3] | X[3] & SV | SL &X[2] ;
assign A[2]=SR & X[3] | X[2] & SV | SL &X[1];
assign A[1]=SR & X[2] | X[1] & SV | SL &X[0] ;
assign A[0]=SR & X[1] | X[0] & SV | SL &1'b0 ;
assign B[3] =(M0 & Y[3]) | (M1 & !Y[3]) ;
assign B[2] =M0 & Y[2] | M1 & !Y[2] ;
assign B[1] =M0 & Y[1] | M1 & !Y[1] ;
assign B[0] =M0 & Y[0] | M1 & !Y[0] ;


assign {carryOut,F[3:0]} = A + B + C0;  
assign sign = F[3];
assign zero = (F==0) ? 1 : 0;  // ~|F;
assign overflow = (~A[3]) & ~B[3] & F[3] | (A[3]) & B[3] & ~F[3] ;

/****** Internal signal assign to output port *******/
assign L[3:0]  = B[3:0];
assign L[7:4]  = A[3:0]; 
assign L[12:9] = F;
assign L[26] = C0; 
assign L[21:18] = {sign, zero, overflow, carryOut};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Best-Wishes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值