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

【FPGA】Verilog:组合电路设计 | 三输入 | 多数表决器

前言:本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载的示例:表决器(三人表决器)。

  • 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片 
  • 配置方式:USB-JTAG/SPI Flash
  • 高达100MHz 的内部时钟速度 
  • 存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A)
  • 通用IO:Switch :x8LED:x16Button:x5DIP:x8   通用扩展IO:32pin
  • 音视频/显示: 7段数码管:x8 VGA视频输出接口 Audio音频接口 
  • 通信接口:UART:USB转UART   Bluetooth:蓝牙模块 
  • 模拟接口: DAC:8-bit分辨率   XADC:2路12bit 1Msps ADC

目录

 Ⅰ. 前置知识

0x00 表决器

0x01 真值表表示

0x02 卡诺图表示

0x03 逻辑表达式:

Ⅱ. Verilog实现

0x00 新建工程并添加的IP包

0x01 利用IP器件创建电路

0x02 Test Bench——添加仿真激励文件

0x03 仿真记录与分析 

 Ⅲ. 解释说明


 Ⅰ. 前置知识

0x00 表决器

以三人表决器为例说明多人表决电路的原理。

设三人表决器中输入为A、B、C,同意用1表示,不同意用0表示。输出为F,A、B、C三者中多数同意,提案通过,否则提案不被通过;通过用1表示,不通过用0表示。

0x01 真值表表示

输入

输出

A

B

C

F

0

0

0

0

0

0

1

0

0

1

0

0

0

1

1

1

1

0

0

0

1

0

1

1

1

1

0

1

1

1

1

1

0x02 卡诺图表示

0x03 逻辑表达式

 过程:写输出表达式即把输出结果为一的输入相加。如上F的一的有四个,把结果为一对应的输入写出即可,再化简,可通过卡诺图以及逻辑表达式化简。

可用狄摩根律转化为与非形式

若此步有不清楚的可留言

Ⅱ. Verilog实现

在本次Verilog实现表决器的功能中,我们学习如何利用他人封装好的组件型IP器件进行设计,故选择为工程添加所需IP包的方法。

0x00 新建工程并添加的IP包

在工程settings中IP的Repository中选择所需IP包的存放目录

点击Select,在图所示对话框中点击ok

Repositories自动更新如图:

点击OK完成IP包的添加

0x01 利用IP器件创建电路

点击Flow Navigator中的IP INTEGRATOR下Create Block Design,为电路设计命名:

 点击OK后工程自动更新至如图:

 在Diagram窗中点击按钮,添加IP器件。

根据原理中的F=AB+BC+CA,本实验添加两种基本器件:AND和OR,

如图:

完成后Design窗自动更新至下图效果:

 在Diagram窗,完成器件添加

之后添加基本引脚:

 增加输入引脚3个,命名自拟

可以为A、B、C,输出1个,可以命名为F。

完成连线,如图:

 点击检查布线的正确性

另外,可点击可以自动优化布线,但这一步并不是必须的

可得出下图:

 点击【保存】按钮,保存电路设计文件:

在Sources栏可以看到新增的文件如图:

 点击该新增文件,如图:

点击Create HDL Wrapper菜单。利用默认项,可让Vivado自动生成代码,如图:

Source栏会自动更新至如图效果:

0x02 Test Bench——添加仿真激励文件

`timescale 1ns / 1ps
module sim4Second( );
reg inA;reg inB;reg inC;
wire outF;
IPdesign_Second_wrapper test(.A(inA),.B(inB),.C(inC),.F(outF));
always begininA = 0;inB = 0;inC=0;   #100;inA = 0;inB = 0;inC=1;   #100;inA = 0;inB = 1;inC=0;   #100;inA = 0;inB = 1;inC=1;   #100;inA = 1;inB = 0;inC=0;   #100;           inA = 1;inB = 0;inC=1;   #100;inA = 1;inB = 1;inC=0;   #100;inA = 1;inB = 1;inC=1;   #100;end
endmodule

0x03 仿真记录与分析 

输入

输出

周期

时间

A

B

C

F

1

0-100ns

0

0

0

0

2

100ns-200ns

0

0

1

0

3

200ns-300ns

0

1

0

0

4

300ns-400ns

0

1

1

1

5

400ns-500ns

1

0

0

0

6

500ns-600ns

1

0

1

1

7

600ns-700ns

1

1

0

1

8

700ns-800ns

1

1

1

1

 Ⅲ. 解释说明

本篇博客旨在学习如何利用他人封装好的组件型IP器件进行设计,从而理解在vivado中,Block Design仅仅是用以设计的直观,最终还是需要生成Verilog等硬件描述语言后才能进一步完成后续设计。

同时,本实验中,生成的IPdesign_Second_wrapper这个module其实是调用了IPdesign_Second,这种调用属于模块化设计方法,因此仿真激励文件中语句IPdesign_Second_wrapper test(参数); 其实信号会继续传递给IPdesign_Second 子模块; 请在仿真界面中调出不同模块的引脚波形进行观察理解。

若不使用导入IP包的方法,设计文件可书写如下:

`timescale 1 ps / 1 psmodule design_1_wrapper(A,B,C,F);input A;input B;input C;output F;wire A;wire B;wire C;wire F;design_1 design_1_i (.A(A),.B(B), .C(C),.F(F));
endmodule

相关文章:

【FPGA】Verilog:组合电路设计 | 三输入 | 多数表决器

前言:本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载的示例:表决器(三人表决器)。 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片 配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部…...

【安全等保】安全等保二级和三级哪个高?哪个费用更高?

等保政策已经严格落地执行了,各大企业纷纷接到了过等保的通知,但有的估计是第一次听到等保,对于等保相关政策都是非常蒙圈的。这不不少企业相关负责人在问,安全等保二级和三级哪个高?哪个费用更高?这里我们…...

C++ STL学习记录(v1)

C STL学习记录一. 什么是STL1.1 STL的诞生1.2 STL基本概念1.3 STL的六大组件1.4 STL中的容器、算法、迭代器1.5 容器、算法、迭代器实践一. 什么是STL 1.1 STL的诞生 STL建立的目的就是为了解决软件界复用性的需求。C的面向对象和泛型编程思想,目的就是为了复用性的…...

开发中遇到的问题

1.当写一个导出功能时,因为编码写URL地址&参数的时候,用反转字符串的时候换行了,造成地址拼接不成,一直报错,后来发现是编码格式造成的,已解决。 解决方案:不换行或者用 “”拼接 2.当本地…...

Javascript笔记

数据类型 基本类型(primitive value) 简单的数据段,包括 Undefined, Null, Boolean, Number, String初始化只使用2原始字面量形式,如果使用new则会创建Object无法加入新的属性 引用类型(reference value) 可能由多个值构成的对象判断类型 typeofinstanc…...

Elasticsearch(ES)配置及优化

在Elasticsearch中,索引的大小和存储能力取决于多个因素,包括文档大小、索引的分片数、硬件规格、查询负载和其他因素。索引和分片配置:索引和分片的数量和配置会对查询并发性能产生影响。如果索引和分片的数量太少,可能会导致查询…...

一文看懂Java语言与Java生态圈

Java语言与Java生态圈 1、Oracle JDK与Open JDK之间的关系 Oracle JDK Java最早是由SUN公司发明,Oracle JDK之前叫SUN JDK,显而易见,这是在2009年Oracle收购SUN公司之前,收购之后被名为Oracle JDK,实际上&#xff0…...

GitHub 上有什么嵌入式方面的项目?

原文直达,喜欢就点个赞吧! GitHub 上有什么嵌入式方面的项目? - CodeAllen的回答 - 知乎 https://www.zhihu.com/question/27835930/answer/2871624679 前言 对于GitHub,可能做互联网开发的同学会更加熟悉,尤其是前端&#xff0…...

【C语言进阶】结构体、位段、枚举和联合

👦个人主页:Weraphael ✍🏻作者简介:目前是C语言学习者 ✈️专栏:C语言航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&a…...

markdown和latex常用部分参考@注脚@链接跳转@csdn

文章目录refmarkdown和latex常用部分参考typora文档基础语法扩展语法链接内联链接的方式将链接提取出来链接示例typora的支持LinksInline LinksInternal Links🎈Reference LinksURLs文章内部跳转(Heading IDs)🎈My Great Heading注脚(Footnotes)&#x1…...

Java 在二叉树中增加一行

623. 在二叉树中增加一行中等给定一个二叉树的根 root 和两个整数 val 和 depth ,在给定的深度 depth 处添加一个值为 val 的节点行。注意,根节点 root 位于深度 1 。加法规则如下:给定整数 depth,对于深度为 depth - 1 的每个非空树节点 cur…...

kubernetes(k8s) 知识总结(第2期)

1. “控制器”思想 kube-controller-manager 是一系列控制器的集合,这些控制器被放在 Kubernetes 项目的 pkg/controller 目录,这些控制器都以独有的方式负责某种编排功能。它们都遵循一个通用的编排模式——控制循环。 以 Deployment 为例介绍它对控…...

windows-Mysql的主从数据库同步设置

复制原有的mysql修改my.ini配置文件 修改端口号修改从数据的地址和从数据库的数据存放地址安装从数据库进入从数据库的bin目录,打开命令窗口输入命令:mysqld.exe install mysql-back --defaults-file "C:\ProgramData\MySQL\MySQL Server 5.7-back\…...

Docker逃逸

文章目录原理环境搭建Docker 环境判断Docker 容器逃逸特权模式逃逸如何判断是否为特权模式逃逸docker.sock挂载逃逸逃逸Remote API未授权访问未授权访问逃逸容器服务缺陷逃逸影响版本环境搭建逃逸脏牛漏洞逃逸参考原理 docker其实就是一个linux下的进程,它通过Name…...

k8s项目部署

k8s命令k8s项目部署部署流程实现导出相应的yaml文件 kubectl create deployment 名字--image镜像-o yaml --dry-runclient > 文件名 例: kubectl create deployment nginx --imagenginx -o yaml --dry-runclient > m1.yaml导出已经部署后的yaml文件 kubectl g…...

Modbus通信协议学习笔记

Modbus主从设备 主控设备(Modbus Master):工控机、PLC、触摸屏等等 从设备(Modbus Slave):PLC、Modbus采集模块、带485通讯的传感器、仪器仪表等等 Modbus物理接口:串口(RS232、RS4…...

ubuntu重启、关机命令

// // // //之前用linux系统, 一键解决也是可以的,反正我每次用命令(泪目…),中间崩了好几次,换回win,此篇也做记录 // // // 重启命令 以下所有命令在root根目录下输入(普通用户&…...

Xshell 7 连接云服务器的步骤和出现的错误

一、工具准备云服务器Xshell 7二、使用 Xshell 7 连接数据库三、新建会话属性后,没有自动弹出 SSH 用户名要求输入四、SSH 用户身份验证不能输入 Password五、Xshell 连接 centos 7 服务器 报错提示 “ssh服务拒绝了密码,请再试一次“,但是密…...

Python多进程同步——文件锁

多个进程共享同一份资源(共享内存、文件等)时,会涉及到资源竞争问题。为了解决这种问题,一般采取的措施是进程在访问资源前加锁保护,避免多个进程同时读写。本文介绍的Python文件锁可以用来解决多进程的同步问题。 目录…...

实现 element-plus 表格多选时按 shift 进行连选的功能

前言 element-plus表格提供了多选功能,可单击勾选一条数据,可全选。 现在有个很合理的需求,希望实现类似于文件系统中shift连续选择功能,并且在表格排序后,依照排序后的顺序连选。 一、el-table 多选表格基本使用 1、…...

从订餐流程到并发编程:Petri网中的‘库所’与‘变迁’到底在模拟什么?

从订餐流程到并发编程:Petri网中的‘库所’与‘变迁’到底在模拟什么? 想象一下,你正在用手机订外卖:选择菜品、下单支付、等待制作、骑手配送——这个看似简单的流程背后,隐藏着一个精妙的系统状态转换模型。这正是Pe…...

OpenClaw智能剪贴板:GLM-4.7-Flash增强复制粘贴功能

OpenClaw智能剪贴板:GLM-4.7-Flash增强复制粘贴功能 1. 为什么我们需要更聪明的剪贴板 作为一个每天要和大量文本打交道的技术写作者,我经常陷入这样的困境:从网页复制的内容带着乱七八糟的格式,从PDF摘录的段落夹杂着换行符和乱…...

AI开发不再卡顿:RTX4090D 24G镜像解决环境冲突全攻略

AI开发不再卡顿:RTX4090D 24G镜像解决环境冲突全攻略 1. 为什么选择RTX4090D 24G深度学习镜像? 深度学习开发者最头疼的问题莫过于环境配置。不同框架版本、CUDA版本、依赖库之间的冲突常常让人望而却步。传统环境搭建方式需要: 手动安装C…...

4个QtScrcpy键鼠映射技巧实现手游操控精准化

4个QtScrcpy键鼠映射技巧实现手游操控精准化 【免费下载链接】QtScrcpy Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy 手游操控一直是移…...

电力电子顶刊投稿避坑指南:TIE与TPEL审稿流程、周期及常见误区全解析

电力电子顶刊投稿策略全解析:从TIE到TPEL的实战避坑指南 在电力电子与电机驱动领域,IEEE Transactions on Industrial Electronics (TIE)和IEEE Transactions on Power Electronics (TPEL)无疑是研究者梦寐以求的发表平台。这两本期刊不仅代表着行业内的…...

S3 文件操作进阶实践:从基础上传到完整性保障

1. S3文件操作的核心挑战与解决方案 第一次接触AWS S3时,很多人会觉得文件上传下载不就是调用几个API的事?但真正投入生产环境后,各种问题就会接踵而至。我见过最典型的案例是某电商平台在促销期间,因为文件上传没有做完整性校验…...

技术指标——格雷厄姆指数

文章目录1. 格雷厄姆指数是什么?2. 格雷厄姆指数的作用是什么?3. 举例计算例1:牛市顶部(2021年2月)例2:熊市底部(2024年2月)例3:中性水平(假设某一般时刻&…...

ai结对编程实践:如何利用kimi在快马平台智能辅助完成用户认证系统开发

AI结对编程实践:如何利用Kimi在快马平台智能辅助完成用户认证系统开发 最近在开发一个需要用户认证功能的项目,后端用Node.js Express,前端用Vue。作为一个独立开发者,面对这种前后端都要兼顾的情况,我决定尝试用Kimi…...

ArcGIS Desktop绘图工具条实战:从基础图形到专业地图注记的进阶指南

1. ArcGIS绘图工具条初探:你的地图设计起点 第一次打开ArcGIS Desktop的绘图工具条时,我就像拿到了一盒全新的彩色铅笔。这个看似简单的工具条,实际上包含了从基础绘图到专业地图注记的全套功能。绘图工具条位于软件界面顶部,右键…...

医药行业用友 YonSuite 一体化管理方案

医保新规 4 月 1 日落地|医药企业破局:数智化 合规 精细化,活下去且活得好2026 年 4 月 1 日,医保新规全面执行,集采深化、价格严控、全链路监管,医药行业正式告别高毛利、粗放式、渠道为王的旧时代&…...