当前位置: 首页 > article >正文

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL66

超前进位加法器

描述

题目描述:    

求两个四位的数据编写一个四位的超前进位加法器,建议使用子模块

提示:超前进位加法器的位公式如下

这里‘+’ ‘·’符号不是‘加’和‘乘’,是‘’和 ‘

波形示意图:

输入描述:

A  B  输入值 

输出描述:

OUT  加法结果

 解题思路

超前进位加法器详解

可参考博文:

行波进位/超前进位加法器详解

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL12

根据本题中的描述,可画出超前进位加法器电路设计图

子模块详解

子模块Add1——1bit全加器

在子模块Add1中:

输入信号1bit的a,b,C_in;其中,a、b为单比特输入信号,C_in为进位信号;

输出信号分别为1bit的f,g,p其中,f为输出信号,可表示为f = a \oplus b \oplus C_{in}g、p表示中间变量;其中g = a\cdot b,p=a + b;(由进位公式C_{i+1}得出)

因此,子模块的代码为:


module Add1
(
		input a,
		input b,
		input C_in,
		output f,
		output g,
		output p
		);

	assign g = a & b;
	assign p = a | b;
	assign f = a ^ b ^ C_in;

endmodule

当仅考虑子模块Add1的添加时(即将进位信号C的公式全都直接在主函数中进行表示)

`timescale 1ns/1ns

module huawei8//四位超前进位加法器
(
	input wire [3:0]A,
	input wire [3:0]B,
	output wire [4:0]OUT
);

//*************code***********//
wire [3:0] P,G; //设置中间变量
wire [3:0] C; //设置进位变量
assign C[0] = 1'b0;
assign C[1] = A[0]&B[0];
assign C[2] = A[1]&B[1] | (A[1]|B[1])&C[1];
assign C[3] = A[2]&B[2] | (A[2]|B[2])&C[2];

Add1 A1 (.a(A[0]), .b(B[0]), .C_in(C[0]), .f(OUT[0]), .g(G[0]), .p(P[0]));
Add1 A2 (.a(A[1]), .b(B[1]), .C_in(C[1]), .f(OUT[1]), .g(G[1]), .p(P[1]));
Add1 A3 (.a(A[2]), .b(B[2]), .C_in(C[2]), .f(OUT[2]), .g(G[2]), .p(P[2]));
Add1 A4 (.a(A[3]), .b(B[3]), .C_in(C[3]), .f(OUT[3]), .g(G[3]), .p(P[3]));

assign OUT[4] = A[3]&B[3] | (A[3]|B[3])&C[3];


//*************code***********//
endmodule

//下面是两个子模块

module Add1
(
		input a,
		input b,
		input C_in,
		output f,
		output g,
		output p
		);
	assign g = a & b;
	assign p = a ^ b;
	assign f = p ^ C_in;

endmodule
子模块CLA_4

子模块CLA_4主要描述进位Ci的情况;

根据题中给出的公式:

C_{i+1} = (A_i\cdot B_i) + (A_i\cdot C_i) + (B_i\cdot C_i) = (A_i\cdot B_i) + (A_i + B_i)\cdot C_i

可得中间变量g = a\cdot b,p=a + b

问题:变量Gm、Pm的定义是??

代码如下:

module CLA_4(
		input [3:0]P,
		input [3:0]G,
		input C_in,
		output [4:1]Ci,
		output Gm,
		output Pm
	);
	assign Ci[1] = C_in & P[0] | G[0];
	assign Ci[2] = Ci[1] & P[1] | G[1];
	assign Ci[3] = Ci[2] & P[2] | G[2];
	assign Ci[4] = Ci[3] & P[3] | G[3];

	assign Gm = 1'b0;
	assign Pm = 1'b0;
endmodule
完整代码
`timescale 1ns/1ns

module huawei8//四位超前进位加法器
(
	input wire [3:0]A,
	input wire [3:0]B,
	output wire [4:0]OUT
);

//*************code***********//
wire [3:0] P,G; //设置中间变量
wire [4:1] C; //设置进位变量

Add1 A1 (.a(A[0]), .b(B[0]), .C_in(1'b0), .f(OUT[0]), .g(G[0]), .p(P[0]));
Add1 A2 (.a(A[1]), .b(B[1]), .C_in(C[1]), .f(OUT[1]), .g(G[1]), .p(P[1]));
Add1 A3 (.a(A[2]), .b(B[2]), .C_in(C[2]), .f(OUT[2]), .g(G[2]), .p(P[2]));
Add1 A4 (.a(A[3]), .b(B[3]), .C_in(C[3]), .f(OUT[3]), .g(G[3]), .p(P[3]));

CLA_4 cla (.P(P), .G(G), .C_in(1'b0), .Ci(C), .Gm(), .Pm());

assign OUT[4] = C[4];


//*************code***********//
endmodule

//下面是两个子模块

module Add1
(
		input a,
		input b,
		input C_in,
		output f,
		output g,
		output p
		);
	assign g = a & b;
	assign p = a | b;
	assign f = a ^ b ^ C_in;

endmodule

module CLA_4(
		input [3:0]P,
		input [3:0]G,
		input C_in,
		output [4:1]Ci,
		output Gm,
		output Pm
	);
	assign Ci[1] = C_in & P[0] | G[0];
	assign Ci[2] = Ci[1] & P[1] | G[1];
	assign Ci[3] = Ci[2] & P[2] | G[2];
	assign Ci[4] = Ci[3] & P[3] | G[3];

	assign Gm = 1'b0;
	assign Pm = 1'b0;
endmodule


http://www.kler.cn/news/324186.html

相关文章:

  • 负载均衡--会话保持失败原因及解决方案(五)
  • 鸿蒙harmonyos next纯flutter开发环境搭建
  • HTML基础用法介绍二
  • Goland使用SSH远程Linux进行断点调试 (兼容私有库)
  • Leetcode基础算法篇|202409(4)贪心算法
  • MySQL数据库修改authentication_string字段为显示密码后无法登录
  • oracle 如何判断当前时间在27号到当月月底
  • [JavaEE] HTTP/HTTPS
  • 2024中国新能源汽车零部件交易会,开源网安展示了什么?
  • Tomcat安装和配置教程(图文详解,最简洁易懂)
  • 【优选算法】(第七篇)
  • Python 算法交易实验89 QTV200日常推进-模式思考
  • SQL:如果字段需要排除某个值但又有空值时,不能直接用“<>”或not in
  • 万字长文理解无界队列和有界队列和适用场景
  • 《自控》误差传递函数、稳态误差、0型、I型、II型系统
  • 从零开始Ubuntu24.04上Docker构建自动化部署(五)Docker安装jenkins
  • TypeScript 设计模式之【策略模式】
  • PHP Session扩展默认session数据储存在哪里
  • 3. 轴指令(omron 机器自动化控制器)——>MC_MoveFeed
  • IDEA开发SpringBoot项目基础入门教程。包括Spring Boot简介、IDEA创建相关工程及工程结构介绍、书写配置文件、Bean对象管理等内容
  • 【教学类-18-04】20240508《蒙德里安“黑白格子画” 七款图案挑选》
  • [大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究
  • 基于VUE的在线手办交易平台购物网站前后端分离系统设计与实现
  • 在矩池云使用 Llama-3.2-11B-Vision 详细指南
  • vxe-table制作高亮刷新功能
  • C#源码安装ZedGraph组件,并且立即演示使用
  • 代码随想录训练营第46天|回文子序列
  • 高通Camx-内存池架构/ImageBuffer
  • Linux进程的学习(持续更新)
  • java后端传时间戳给前端的三种方式