牛客Verilog题目(1)——超前进位加法器

news/2024/5/7 12:59:31/文章来源:https://blog.csdn.net/QWER306306/article/details/129744837

今天起,开始统计一些做的比较难的或者可以扩展知识面的Verilog题目。
第一题来自牛客->verilog快速入门->第12题

在这里插入图片描述

4个二进制全加器串联的四位加法器

在此之前需要了解全加器、4个1位二进制全加器串联的四位加法器。再了解为什么要用这种超前进位加法器。’
全加器很简单,直接写成最小二项式和异或门形式:

module my_mux2(input in1,input in2,input cin,output wire cout,output wire out);assign cout = in1&in2 | in1&cin | in2&cin;assign out = in1 ^ in2 ^ cin;
endmodule

然后将其串联起来,一开始我就reg了一位寄存器当相互的节点值,后来发现是不可以的,因为在电路中不符合理想。
错误过程如下:

module multi_sel(input		[3:0]       A_in  ,input	    [3:0]		B_in  ,input                   C_1   ,output	 wire			CO    ,output   wire [3:0]	    S	  );parameter width = 4;
//方法一:四个1位全加器串联
genvar i;
for(i = 0; i<width; i=i+1) beginmy_mux2 m(.in1(A_in[i]),.in2(B_in[i]),.cin(C_1),.cout(CO),.out(S[i]));assign CIN = CO;
end

在这里插入图片描述
可以从图中看出是有明显问题的,不会像C一样顺序运算,而是根据逻辑将两节点直接相连
经过修改后,

module multi_sel(input		[3:0]       A_in  ,input	    [3:0]		B_in  ,input                   C_1   ,output	 wire			CO    ,output   wire [3:0]	    S	  );
wire [3:0] CIN;
wire [3:0] COUT;
parameter width = 4;
//方法一:四个1位全加器串联
genvar i;
for(i = 0; i<width; i=i+1) beginmy_mux2 m(.in1(A_in[i]),.in2(B_in[i]),.cin(CIN[i]),.cout(COUT[i]),.out(S[i]));     
end
assign CIN[0] = C_1;
assign CIN[1] = COUT[0];
assign CIN[2] = COUT[1];
assign CIN[3] = COUT[2];
assign CO = COUT[3];

整个逻辑还是很简单的,直接前一级进位输出连接后一位进位输入即可。电路图如:
在这里插入图片描述

超前进位加法器

可以看出上面是将四位一位全加器串联,如果是多位相加,线路的延迟会更加明显,并且运行速度也会相对并行运算较慢。所以用题中的方法:

module multi_sel(input		[3:0]       A_in  ,input	    [3:0]		B_in  ,input                   C_1   ,output	 wire			CO    ,output   wire [3:0]	    S	  );
//方法二:超进位4位全加器,用面积换并行运算(运算速度)
wire [3:0]  G;
wire [3:0]  P;
wire [3:0]	C;genvar i;
for (i = 0; i<4; i=i+1) beginassign G[i] = A_in[i] & B_in[i];assign P[i] = A_in[i] ^ B_in[i];
end	assign C[0] = C_1;
assign C[1] = G[0] || ( C[0] & P[0] );
assign C[2] = G[1] || ( C[1] & P[1] );
assign C[3] = G[2] || ( C[2] & P[2] );
assign S[0] = P[0] ^ C[0];
assign S[1] = P[1] ^ C[1];
assign S[2] = P[2] ^ C[2];
assign S[3] = P[3] ^ C[3];assign CO = G[3] || ( C[3] & P[3] );endmodule

在这里插入图片描述
图看起来很吓人,这是由于上个方法,把1位二进制全加器封装起来了,相比于上种方法,面积还是减小很多。

激励文件(顶层文件)

`timescale 1ns/1nsmodule testbench();reg clk = 1;
initialbeginrepeat (100)#5 clk = ~clk;endreg [3:0] A;reg [3:0] B;reg C1;wire CO;wire [3:0]S;multi_sel inst(    .A_in(A),.B_in(B),.C_1(C1),.CO(CO),.S(S));initial beginA = 4'd2;B = 4'd5;C1 = 1'b1;#10;B = 4'd4;#30;B = 4'd3;#50;C1 = 1'b0;#10;A = 4'd12;#10;A = 4'd7;#70;end //  initial begin
//    $dumpfile("out.vcd");
//    // This will dump all signal, which may not be useful
//    //$dumpvars;
//    // dumping only this module
//    //$dumpvars(1, testbench);
//    // dumping only these variable
//    // the first number (level) is actually useless
//    $dumpvars(0, testbench);
//end  
endmodule

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_275848.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

APP小程序移动商城系统 助力电商企业拓客引流

近几年电商企业的发展湿透持续旺盛&#xff0c;加上人们线上支付习惯的普及&#xff0c;使网上商城取得了稳健的发展。网上商城系统是在为个人用户和企业用户提供人性化的全方位服务&#xff0c;为用户创造轻松预约的购物环境&#xff0c;满足消费者多样化的购物需求&#xff0…

Microsoft Remote Desktop for Mac(远程桌面连接工具)

Microsoft Remote Desktop for Mac是一款Mac OS平台上的远程桌面控制软件来自微软&#xff0c;你可以通过Microsoft Remote Desktop for mac来控制Windows或者Mac OS设备完成你的工作。microsoft远程桌面为mac译名为微软远程桌面软件&#xff0c;这是一款Mac OS平台上的远程桌面…

OpenAI Translator | 基于ChatGPT API全局翻译润色解析插件

简介 OpenAI Translator&#xff0c;一款基于 ChatGPT API 的划词翻译浏览器插件和跨平台桌面端应用&#xff0c;使用 ChatGPT API 进行划词翻译和文本润色&#xff0c;借助了 ChatGPT 强大的翻译能力&#xff0c;帮助用户更流畅地阅读外语和编辑外语&#xff0c;允许跨 55 种…

Redis简单介绍-安装基本类型及其操作命令

文章目录1. redis网址2. 安装redis3. redis10大类型及操作命令3.1 key操作命令3.1.1 redis-server重启后数据不会消失3.1.2 keys * 显示所有的key3.1.3 exists 判断key是否存在&#xff0c;存在则计数加13.1.4 type 显示出类型3.1.5 del 删除指定key&#xff0c;返回结果为被删…

人工智能会给普通人带来哪些改变

最近人工智能太火了&#xff0c;很多人都听说了&#xff0c;尤其是大语言模型。可以让我们像和真人聊天一样&#xff0c;与AI对话&#xff0c;根据你所问的问题&#xff0c;AI可能像一个老师&#xff0c;像一个老人&#xff0c;像一个智者回答你的几乎所有问题。这也把有些人吓…

[openwrt]network配置生成和下发

配置脚本调用 network的配置处理入口为:/etc/init.d/boot,函数调用: /bin/config_generate脚本内容如下:

SpringCloud搭建微服务之Gateway+Jwt实现统一鉴权

1. 概述 在微服务项目中&#xff0c;需要对整个微服务系统进行权限校验&#xff0c;通常有两种方案&#xff0c;其一是每个微服务各自鉴权&#xff0c;其二是在网关统一鉴权&#xff0c;第二种方案只需要一次鉴权就行&#xff0c;避免了每个微服务重复鉴权的麻烦&#xff0c;本…

服务端测试知识汇总

目录 服务端测试思想 经济学⻆度 ⾦字塔模型 技术⻆度 HTTP协议 三次握⼿ HTTP完整请求 通信模式 URI信息 请求⽅法 请求状态码 请求/响应头 常⽤请求数据格式 COOKIE请求流程 SESSION请求流程 TOKEN请求流程 API测试维度 单接⼝测试 多个接⼝测试 …

【tensorboard】深度学习的日志信息events.out.tfevents文件可视化工具

在用深度学习模型训练完模型后&#xff0c;会有一些events.out.tfevents格式的日志信息文件&#xff0c;如下图&#xff1a; 在这类文件需要用tensorboard进行打开&#xff0c;并且查看训练过程的信息内容。 1. tensorboard安装 pip install tensorboard -i https://pypi.do…

从零开始学Python第06课:循环结构

我们在写程序的时候&#xff0c;极有可能遇到需要重复执行某条指令或某些指令的场景&#xff0c;例如我们需要每隔1秒钟在屏幕上输出一次“hello, world”并持续输出一个小时。如下所示的代码可以完成一次这样的操作&#xff0c;如果要持续输出一个小时&#xff0c;我们就需要把…

shell:简单易明白的变量和引用

目录什么是变量shell的变量类型declare定义变量的类型根据数据类型分类根据作用域分类变量的定义shell 中的引用什么是变量 可以变化的量。本质上讲&#xff0c;变量就是在程序中保存用户数据的一块内存空间&#xff0c;而变量名就是这块内存空间的地址。 shell的变量类型 s…

“先人一步”!从华为P60看手机品牌如何找到新趋势、新玩法、新增量

对大多数人来说&#xff0c;换新手机是一件充满新鲜感的事&#xff0c;新机到手让人兴奋&#xff0c;可更让老蔡这样的科技发烧友们兴奋的是“比别人更快拿上新机”。朋友圈里晒图&#xff0c;一群人向他询问使用体验&#xff0c;总能让他获得一种不错的“尝鲜感”。这种现象&a…

【javaweb】SpringBoot初次体验

工具&#xff1a;idea 创建maven文件 导入依赖&#xff0c;在pom.xml中&#xff08;在spring boot的官方文档找&#xff09; <!-- spring工程中需要继承的父工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-b…

F1-F7快恢复二极管 SOD-123 1A 50V~1000V

之前东沃电子&#xff08;DOWOSEMI&#xff09;科普过快恢复二极管ES1A-ES1J&#xff1a;SMA封装、正向平均电流1A、最大反向恢复时间35ns、型号齐全&#xff0c;具体型号有&#xff1a;ES1A、ES1B、ES1C、ES1D、ES1E、ES1G、ES1H、ES1J&#xff0c;所对应的工作峰值反向电压分…

composer详解

一.composer简介什么是ComposerComposer 是 PHP 的一个依赖管理工具&#xff0c;它涉及 "packages" 和 "libraries",简单的说就是我们的项目通常会使用其它代码工具库&#xff0c;这时仅仅是在项目中申明依赖哪些代码工具库&#xff0c;它在每个项目的基础…

基于JavaWeb+jsp实现企业员工工资管理系统

一、项目简介 本项目是一套基于ServletJsp实现的学生成绩管理系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&#xff0…

Android开发工程师想找工作需要掌握哪些

前言 目前互联网行业越来越好&#xff0c;进入这个行业的人员也是越来越多。从开发的角度来看&#xff0c;开发的职位主要分前端&#xff0c;后端&#xff0c;客户端&#xff08;主要分为ios和android开发&#xff09;以及算法工程师等。 Android开发一直是当前互联网行业中最…

playwright--pytest-playwright、pytest-base-url插件编写用例

文章目录前言一、安装插件二、编写用例三、运行用例四、内置fixture五、全局配置base_url前言 官方的 pytest-playwright 插件可以编写端到端测试。它提供上下文隔离&#xff0c;开箱即用地在多个浏览器配置上运行。它继承了pytest框架&#xff0c;以及支持playwright的一些基…

【FPGA-DSP】第一期:DSP基础

目录 1. DSP基础 1.1 DSP基本概念 1.2 FPGA实现DSP的特点 2. DSP硬核的结构与使用 3. FPGA设计DSP技术 3.1. 浮点数与定点数的表示与转换 3.1.1. 双精度浮点数表示 3.1.2. 双精度浮点数与定点数的转换 本章作为FPGA数字信号处理的入门介绍课程&#xff0c;将介绍DSP的…

如何在Windows 10中恢复丢失的分区?

一般来说&#xff0c;未分配的空间不能在分区前直接用于存储数据&#xff0c;因此大多数Windows用户会将硬盘划分为不同的分区以存储各种数据。你可以在Windows安装期间或安装完系统后通过硬盘管理、DiskPart命令或第三方工具创建分区。 在分区丢失后&#xff0c;你会…