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

devtools/2024/9/29 11:33:41/

超前进位加法器

描述

题目描述:    

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

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

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

波形示意图:

输入描述:

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/1nsmodule 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/1nsmodule 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;endmodulemodule 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.ppmy.cn/devtools/118668.html

相关文章

鸿蒙HarmonyOS NEXT系统揭秘:跨端迁移与多端协同

随着科技的飞速发展,万物互联的时代已经悄然来临。 在这个背景下,华为鸿蒙HarmonyOS NEXT系统的最新动向无疑成为了业界关注的焦点。 近日,关于鸿蒙操作系统将多设备协同功能细分为“跨端迁移”与“多端协同”的消息不胫而走,这…

DTO VO 与 POJO

目录 1、VO(View Object)2、DTO(Data Transfer Object)3、PO(Persistent Object) 名称说明Entity实体,通常和数据库中的表对应VO视图对象,为前端展示数据提供的对象DTO数据传输对象&…

Delphi 12.2 新出的 WebStencil 组件和 Quill 编辑器配合的问题

Quill editor 是一个很不错的开源的前端浏览器页面里使用的富文本编辑器。 如果我们使用 Delphi 12.2 最新推出的 webStencil 组件来开发一个 WEB 程序,又使用了类似的富文本编辑器,有一个小问题需要注意。 问题描述 在富文本编辑器里面输入的文字&am…

【JavaEE初阶】深入理解wait和notify以及线程饿死的解决

前言: 🌈上期博客:【JavaEE初阶】深入解析死锁的产生和避免以及内存不可见问题-CSDN博客 🔥感兴趣的小伙伴看一看小编主页:【JavaEE初阶】深入解析死锁的产生和避免以及内存不可见问题-CSDN博客 ⭐️小编会在后端开…

代码随想录打卡Day46

今天是动态规划的最后一天,终于要结束折磨了!!!今天的两道题,第一道看视频做的,第二道自己AC的,开心!!!! 647. 回文子串 这道题不能用一维dp数组…

visual studio 调试技巧

visual studio 调试技巧 概述 在使用visual studio 进行调试的时候,有几个调试方法很好用,这里做一些记录。 GTEST 单元测试 参考 VS2022创建C C GTEST工程 - Hello-FPGA - 博客园 (cnblogs.com) 内存查看 命令行测试动态库 附加到进程调试动态库 …

❤ Node实现图片存储和文件存储

# Node13-图片存储接口本地 1、编写错误中间件​ 需要编写一个错误中间件,用来抛出错误,防止因为错误而造成接口崩溃 注意:错误中间件一定要放在所有路由之后 (1) 在所有路由之后放置中间件​ js app.use((err, …

软件架构设计师教程 第11章 11.4 边缘计算概述 笔记

11.4 边缘计算概述 ★★☆☆☆ 11.4.1 边缘计算概念 边缘计算将数据的处理、应用程序的运行甚至一些功能服务的实现,由 网络中心下放到网络边缘的节点上。在网络边缘侧的智能网关上就近采集并且处理数据,不需要上传原生数据。 11.4.2 边缘计算的定义 1…