FPGA(3)验证数字逻辑(与门、与非门、二选一数据选择器、2-4译码器、半加器、全加器)

2023-11-19

目录

一、验证与门

二、验证与非门

三、验证二选一数据选择器

四、验证2-4译码器

五、验证半加器

六、验证全加器

0、初始化定义

1、第一个半加器 

2、第二个半加器

3、得到最终进位Co

代码


0决定与,1决定或

一、验证与门

 只要有一个按键按下,结果即为低电平,灯亮。

assign led1 = key1&key2;		//与门(只要有一个按键按下,则结果为低电平,灯亮)
//验证与门、与非门
module my_and			//my_and:文件名称
(			
//1、配置输入输出变量
input wire key1,		//输入引脚key1
input wire key2,		//输入引脚key2
output wire led1,		//输出引脚led1
output wire led2		//输出引脚led2
);

//2、变量赋值
assign led1 = key1&key2;		//与门(只要有一个按键按下,则结果为低电平,灯亮)
//assign led2 = !(key1&key2);	//与非门(没有按键按下,全为1,结果取反,为0,,灯亮)

endmodule

二、验证与非门

 两个数相与,取反。

只有无按键按下的情况,两个按键都为1,相与结果为1,再取反为0,最终的电平点亮灯。(有任何一个按键按下,灯都不会亮了)

assign led2 = !(key1&key2);	//与非门(没有按键按下,全为1,结果取反,为0,,灯亮)
//验证与门、与非门
module my_and			//my_and:文件名称
(			
//1、配置输入输出变量
input wire key1,		//输入引脚key1
input wire key2,		//输入引脚key2
output wire led1,		//输出引脚led1
output wire led2		//输出引脚led2
);

//2、变量赋值
//assign led1 = key1&key2;		//与门(只要有一个按键按下,则结果为低电平,灯亮)
assign led2 = !(key1&key2);	//与非门(没有按键按下,全为1,结果取反,为0,,灯亮)

endmodule

三、验证二选一数据选择器

 

sl是筛选端,a和b是两个输入端。 

//二选一数据选择器
module my_and(led1, key1, key2, key3);

input wire key1, key2, key3;	//输入:a、b、s
output reg led1;					//输出(y/out)

always@(key1, key2, key3)
begin 
	//使能按下
	if(!key3)
		led1 = key1;
	else
		led1 = key2;
end
endmodule

四、验证2-4译码器

  

2-4:通过1+2个按键和4个led灯来实现。

首先进行使能。(使能按键E)

两个按键四种状态:00、01、10、11

按键00:1(led1亮)
按键01:2(led2亮)
按键10:3(led3亮)
按键11:4(led4亮)

//2-4线译码器
module my_and(key, led, E);

input wire[1:0] key;				//定义两个key数组
input wire E;						//定义使能按键
output reg[3:0] led=4'b1111;	//定义四个led数组(赋初值1)(熄灭led)

always@(key)
	//使能按键按下
	if(!E)
		begin
			case(key)
				2'b00: led = 4'b0111;	//按键00:1(led1亮)
				2'b01: led = 4'b1011;	//按键01:2(led2亮)
				2'b10: led = 4'b1101;	//按键10:3(led3亮)
				2'b11: led = 4'b1110;	//按键11:4(led4亮)
				default: led = 4'b1111;	//led全灭(出错)
			endcase
		end

endmodule

五、验证半加器

半加器:对两个输入数据位相加,输出一个结果位和进位。

结果:S = A ^ B(S=A异或B)

进位:C = A & B(C=A与B)

定义2个按键输入:A、B(分别代表两个输入A、B) 

定义2个LED输出:S、C(分别代表本位结果S、进位C)

//验证半加器
module my_and(A, B, S, C);

input wire A, B;		//定义两个输入
output wire S, C;		//定义结果、进位输出

assign S = A^B;		//本位结果S=A异或B
//二进制只有0+1 或 1+0 才有结果1;否则1+1或者0+0,当前位都为0

assign C = A&B;		//进位C=A与B
//二进制只有1+1 才会出现进位

endmodule

六、验证全加器

全加器:两个半加器连接而成。 

 

标注了1级和2级半加器: 

 (红色标记是容易连错的地方)

 

A、B、CI为输入,结果位S、进位CO为输出

利用模块实例化,分别实例化两个半加器,最终组合为全加器

0、初始化定义

定义输入输出引脚变量。 

//全加器(两个半加器连接)
module my_and(A, B, Ci, S, Co);

//变量定义
input wire A, B, Ci;		//输入1、输入2、低端进位(输入3)
output wire S, Co;		//结果输出位、总进位

1、第一个半加器 

        两个按键key1、key2分别代表A、B,作为两个输入。 最终得到的结果位作为A2(第二个,即后面的那个半加器),得到进位作为C1

注:模块实例化,输入是传入(赋值进去),输出是传出来(被赋值)。 

半加器half_adder只需把.v的文件放入文件夹即可(前面编写过)。

//模块实例化(此处采样端口关联)
//第一个半加器
half_adder half_adder1(.A(A), .B(B), .S(A2), 	  .C(C1));
//第一个半加器:				输入1  输入2  结果位(输出)   进位(输出)

2、第二个半加器

        A2是第一个的S结果位 ,作为第二个半加器的输入1,低端进位Ci对应的是按键key3,作为第二个半加器的输入2。分别得到最终的结果S、第二个半加器进位C2

//第二个半加器
half_adder half_adder2(.A(A2), .B(Ci),      .S(S), 		.C(C2));
//第二个半加器:				输入1  输入2(低端进位) 结果位(输出)  进位(输出)

3、得到最终进位Co

第二个半加器那里已经得到了最终的S结果位,所以现在只需要再处理最终的进位Co即可

把两个半加器的进位C1和C2组合(或)一下,即可得到最终进位Co:

//总进位
assign Co = C1 | C2;

代码

//全加器(两个半加器连接)
module my_and(A, B, Ci, S, Co);

//变量定义
input wire A, B, Ci;		//输入1、输入2、低端进位(输入3)
output wire S, Co;		//结果输出位、总进位

//模块实例化(此处采样端口关联)
//第一个半加器
half_adder half_adder1(.A(A), .B(B), .S(A2), 	  .C(C1));
//第一个半加器:				输入1  输入2  结果位(输出)   进位(输出)

//第二个半加器
half_adder half_adder2(.A(A2), .B(Ci),      .S(S), 		.C(C2));
//第二个半加器:				输入1  输入2(低端进位) 结果位(输出)  进位(输出)

//注:和输入端口相关联时,传入值(赋值进去);
//		和输出端口相关联时,传出值(赋值出来)。

//总进位
assign Co = C1 | C2;

endmodule

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA(3)验证数字逻辑(与门、与非门、二选一数据选择器、2-4译码器、半加器、全加器) 的相关文章

  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • 在vhdl中生成随机整数

    我需要在 vhdl 中生成 0 1023 之间的随机整数 但是我在互联网上找不到这方面的好资源 请问有人帮我吗 下面是生成范围 0 1023 内均匀 均匀 分布的整数的示例 请注意 floor必须在与最大值 1 相乘之后使用运算 在本例中为
  • Stm32最小系统板电路设计

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • 关于DC电源模块有哪些常见的输入和输出参数?

    关于DC电源模块有哪些常见的输入和输出参数 BOSHIDA DC电源模块是一种用于将交流电转换为直流电的设备 广泛应用于电子设备 通信设备 工业控制 仪器仪表等各个领域 在选择和使用DC电源模块时 了解其常见的输入和输出参数是很重要的 输入
  • STM32F103概要

    The STM32F103x4 STM32F103x6 STM32F103xC STM32F103xD and STM32F103xE are a drop in replacement for STM32F103x8 B medium d
  • SH367309芯片

    博主 主要纪录自己常用的几种模式 以及自己觉得需要注意的点 具体的请看数据手册 且大部分都是从数据手册中截取 1 烧写模式 VPRO管脚外接EEPROM烧写电压V PRO 且延时10mS SH367309进入烧写模式 关闭充放电MOSFET
  • 如何生成异步复位verilog总是阻塞凿子

    Chisel 始终生成敏感度列表中仅包含时钟的块 always posedge clk begin end 是否可以将模块配置为使用异步重置并生成这样的始终块 always posedge clk or posedge reset begi
  • 同时读取和写入寄存器

    我计划在 FPGA 上用 VHDL 设计一个类似 MIPS 的 CPU CPU 将具有经典的五级管道 没有转发和危险预防 在计算机体系结构课程中 我了解到第一个 MIPS CPU 用于在时钟上升沿读取寄存器文件并在时钟下降沿写入 我使用的F
  • 修改后的 baugh-wooley 算法乘法 verilog 代码不能正确乘法

    以下 verilog 源代码和 或测试平台可以很好地工作商业模拟器 iverilog https www edaplayground com x 3TuQ也形式化验证工具 yosys smtbmc https gist github com
  • VHDL门控时钟如何避免

    我收到了避免使用门控时钟的建议 因为它可能会导致松弛和时序限制问题 但我想问一下我可以认为什么是门控时钟 例如 此代码对时钟进行门控 因为 StopCount 对它进行门控 process ModuleCLK begin if rising
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • PD SINK协议芯片系列产品介绍对比-ECP5701、FS312A、CH221K、HUSB238、AS225KL

    目录 一 ECP5701 二 FS312A 三 CH221K 四 HUSB238 五 AS225KL 在如今快节奏生活不断蔓延的背景下 人们对各种事情的处理也渐渐地开始要求在保证质量的情况下 不断加快 手机快充就是一个典型的例子 从开始的1
  • 会stm32有机会进大公司吗?

    今日话题 会stm32有机会进大公司吗 我本科期间参与了飞思卡尔和电赛等比赛 使用过多种单片机 但渐渐发现单片机只是其中的一小部分 不要过分迷恋所谓的单片机基础和技巧 更值得深入研究的是C语言 如果你对此感兴趣 我愿意无偿分享一个资源包 其
  • UIO 设备上的 mmap EINVAL 错误

    在尝试使用 UIO 而不是直接映射后 我在 Xilinx Zynq 上映射物理内存时遇到问题 dev mem 虽然计划是以普通用户身份运行应用程序 而不是root这仍在运行root 显然 第一个映射成功 其余映射到同一个文件描述符12 de
  • 太阳诱电 | 电容器为什么会发热?什么是纹波电流

    电容器中存在寄生于电极和电介质的电阻成分 当纹波电流等交流电流通过电容器时 电阻的成分会产生热量 为了抑制发热 选择ESR较低的电容器非常重要 陶瓷电容器在电容器中ESR较低 非常适合抑制发热 电容器中的纹波电流主要是指电源电路中由于IC的
  • 模拟器和合成器之间初始化状态机的差异

    我的问题是关于合成状态机中使用的第一个状态 我正在使用莱迪思 iCE40 FPGA 用于仿真的 EDA Playground 和用于综合的莱迪思 Diamond Programmer 在下面的示例中 我生成一系列信号 该示例仅显示引用状态机
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • STM32H5 Nucleo-144 board开箱

    文章目录 开发板资料下载 目标 点亮LD1 绿 LD2 黄 和LD3 红 三个LED灯 开箱过程 博主使用的是STM32CubeMX配置生成代码 具体操作如下 打开STM32CubeMX File gt New project 选择开发板型
  • 如何在Altera Quartus中生成.rbf文件?

    什么是 rbf 文件以及如何在 Windows 上从 Quartus 输出文件 sof 生成它们 An RBF is a 原始二进制文件例如 它代表原始数据 这些数据将被加载到闪存中 以便在上电时初始化 FPGA A SOF is an S
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更

随机推荐

  • 第2讲 Hi3861的WiFi实验-Station模式

    引言 在本文中 带大家编写一个程序 测试Hi3861的WiFi Station模式 进一步熟悉相关API的使用 请先按照本专栏第一讲中的第四部分准备好实验环境 一 编写程序 首先 打开 DevEco Device Tool 在鸿蒙项目 hi
  • Mysql JDBC Driver参数配置

    1 建立连接配置 1 user 连接的用户 默认值 无 2 Password 连接时使用的密码 默认值 无 3 socketFactory 驱动程序用于创建与服务器套接字连接的类的名称 该类必须实现了接口 com mysql jdbc So
  • 问题解决:io.lettuce.core.RedisCommandTimeoutException: Command timed out after

    环境 spring boot starter 2 x 和 sprig data starter data redis 2 x 在使用 connection bRPop timeout rawKey 方法时 如果这里的timeout大于spr
  • 飞桨AI Studio(星河社区)推出文心大模型的SDK功能

    随着大模型的涌现 我们喜悦于其远远超越小模型的性能 但又不得不面临大模型开发难的困境 训练难 微调难 部署难 开发者难以将其投入实际生产 不仅面临资源的限制 更面临高精数据难寻 时间成本过高等问题 为了让平台更多开发者可以进行大模型开发 体
  • 有序顺序表的插入

    下面看问题场景 如图是一个有序表 有序表是用数组承载的 然后我想把 元素 8插入到有序表 怎么实现呢 下面开始用人脑模拟 要把 8 插入到有序表 先从有序表的第一个元素和8进行比较 依次看到了7 下一个元素9大于8 停止遍历 我们就把 8
  • ABAP动态编程-动态生成报表、动态屏幕

    目录 前言 一 动态生成报表并调用 二 动态生成屏幕并调用 总结 前言 本文主要讲述ABAP编程中根据逻辑自动生成报表及屏幕 依托语句GENERATE DYNPRO 的实现示例及简单说明 一 动态生成报表并调用 代码示例 Create re
  • Map对象以及作用域

    首先我们要明白什么键值对 键值对 key value 顾名思义 每一个键会对应一个值 例 a 身份证号和你本人是绑定的关系 每一个身份证 键 会对应一个人 值 b 登录微信和游戏 需要输入手机号验证身份 手机号码 键 对应接收用户 值 每个
  • core_cm3.h文件报错问题

    D Software Keil5 ARM PACK Keil STM32F1xx DFP 2 1 0 Device Include stm32f10x h 483 error 5 cannot open source input file
  • mysql批量插入数据

    比较两种批量插入数据的方法 差距不是一般的大 方法一 最笨重的方法 一条一条的插入 sql语句如下
  • 假定CSomething是一个类,执行下面这些语句之后,内存里创建了____个CSomething对象。...

    CSomething a CSomething b 2 CSomething c 3 CSomething ra b CSomething d b CSomething pA c CSomething p new CSomething 4
  • Python自动化测试之异常处理机制知识讲解

    一 前言 今天笔者还是想要讲python中的基础 主要讲解Python中异常介绍 捕获 处理相关知识点内容 只有学好了这些才能为后续自动化测试框架搭建及日常维护做铺垫 废话不多说我们直接进入主题吧 二 异常处理合集 2 1 异常处理讲解 在
  • 四川百幕晟科技有限公司:抖音名称最多多少字?

    在抖音上 用户可以为其帐户选择昵称 该昵称显示在用户的个人资料中 不过 很多人好奇 一个抖音昵称到底能有多少个字 本文将深入探讨抖音昵称长度限制以及一些最吸引人的昵称示例 1 抖音昵称长度限制 抖音昵称的长度限制是一个相对灵活的规定 具体而
  • android判断一个Activity是否处于栈顶

    实际开发中我们需要很多情况需要判断某个activity是否位于栈顶 也许会给新的小伙伴带来困扰 那么直接上代码吧 也没几行 判断某activity是否处于栈顶 return true在栈顶 false不在栈顶 private boolean
  • Charles连接手机移动端的基本使用及教程

    一 Charles基本使用 1 打开 Help Local IP Address 查看本机的IP地址 2 设置手机 手机需要连接到和电脑在同一网络的 WIFI 依次打开 设置 无线局域网 点击已选wifi最右边的感叹号 填好以后 返回 打开
  • MySQL 8 group by 报错 this is incompatible with sql_mode=only_full_group_by

    文章目录 sql mode配置 ONLY FULL GROUP BY STRICT TRANS TABLES NO ZERO IN DATE NO ZERO DATE ERROR FOR DIVISION BY ZERO NO AUTO C
  • linux的设计模式属于,linux下GUI设计模式的有效性

    考虑到你在评论中如何解释你的应用程序 同时完全支持Qt 我也建议你考虑一下将你的应用程序变成一个web应用程序可能带来的许多好处 在 既然你说它是一个客户端服务器应用程序 它至少需要 至少 本地网络连接 所以通常针对web应用程序提出的第一
  • 多人实时对战网络同步方式研究

    写在开头 已经研究生毕业快一年半了 一直在一家游戏公司做客户端研发 至于这篇文章讲的却是服务端的东西 主要是因为以前一直没想写博客 学到的东西也一直记在本子上就得了 本人喜欢有剧情的东西 像RPG游戏 仙剑爱好者 有剧情的电视 电影 还有竞
  • 华为OD机试真题 Java 实现【开心消消乐】【2023 B卷 100分】

    目录 一 题目描述 二 输入描述 三 输出描述 四 Java算法源码 五 效果展示 1 输入 2 输出 3 说明 一 题目描述 给定一个N行M列的二维矩阵 矩阵中每个位置的数字取值为0或1 矩阵示例如 1 1 0 0 0 0 0 1 0 0
  • en结尾的单词_形容词加en前后缀变动词的英语单词

    1 hreat threaten恐吓 2 strength strengthen 使 变长 加强 巩固 使强大 3 loose loosen 使放松 4 tight tighten 使变紧 5 weak weaken 削弱 使 变弱 6 w
  • FPGA(3)验证数字逻辑(与门、与非门、二选一数据选择器、2-4译码器、半加器、全加器)

    目录 一 验证与门 二 验证与非门 三 验证二选一数据选择器 四 验证2 4译码器 五 验证半加器 六 验证全加器 0 初始化定义 1 第一个半加器 2 第二个半加器 3 得到最终进位Co 代码 0决定与 1决定或 一 验证与门 只要有一个