当前位置: 首页 > 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

http://www.lryc.cn/news/7313.html

相关文章:

  • 【安全等保】安全等保二级和三级哪个高?哪个费用更高?
  • C++ STL学习记录(v1)
  • 开发中遇到的问题
  • Javascript笔记
  • Elasticsearch(ES)配置及优化
  • 一文看懂Java语言与Java生态圈
  • GitHub 上有什么嵌入式方面的项目?
  • 【C语言进阶】结构体、位段、枚举和联合
  • markdown和latex常用部分参考@注脚@链接跳转@csdn
  • Java 在二叉树中增加一行
  • kubernetes(k8s) 知识总结(第2期)
  • windows-Mysql的主从数据库同步设置
  • Docker逃逸
  • k8s项目部署
  • Modbus通信协议学习笔记
  • ubuntu重启、关机命令
  • Xshell 7 连接云服务器的步骤和出现的错误
  • Python多进程同步——文件锁
  • 实现 element-plus 表格多选时按 shift 进行连选的功能
  • 华为OD机试真题JAVA实现【考古学家】真题+解题思路+代码(20222023)
  • Spring3之基于Aspect实现AOP
  • buctoj-寒假集训进阶训练赛(二十二)
  • 华为OD机试真题JAVA实现【静态扫描最优成本】真题+解题思路+代码(20222023)
  • 汽车装配工厂立库物料运送线PLC无线应用
  • Python雪花代码
  • Numpy基础与实例——人工智能基础
  • MQTT的工作原理
  • iOS开发:UINavigationController自定义返回按钮,系统导航支持侧滑返回
  • 【Kafka进阶】-- unclean.leader.election.enable参数的内涵
  • 基于redis实现分布式锁