Verilog——38译码器(包括仿真文件和约束文件的格式)
描述方式
之前说过,verilog属于高级语言,需要软件设计硬件结构来实现,也说过描述方式是有很多种的,下面介绍一下。
结构描述十分底层,相当于自己搭电路;
行为描述最简单,只需要写出输入对应的输出就行,例子中需要case语句。
数据流描述比较玄学,还需要找关系,感觉也不太好。
对于题目38译码器这样一个简单的器件,我们选择行为描述的方式最简单(要是有个十几个输入,case语句直接爆炸,所以这种方式也是有限制的)
代码:
`timescale 1ns / 1ps //时钟信号的精度和周期module decoder_38(input [2:0] data_i, //输入数据input [2:0] en_i, //使能端,高低有效看要求,这里是0、1位低有效,2位高有效output reg [7:0] data_o //输出的八位数据
);
always @(*) beginif(en_i[0] || en_i[1] || !en_i[2]) //注意一下,译码器一般默认是低有效,所以全1相当于使能端无效data_o = 8'b1111_1111;else case (data_i)3'b000: data_o = 8'b1111_1110;3'b001: data_o = 8'b1111_1101;3'b010: data_o = 8'b1111_1011;3'b011: data_o = 8'b1111_0111;3'b100: data_o = 8'b1110_1111;3'b101: data_o = 8'b1101_1111;3'b110: data_o = 8'b1011_1111;3'b111: data_o = 8'b0111_1111;endcase
end
endmodule
(虽然说是低有效,但是最后连接板子上的led还是高有效的,然后就会全反了……实际需要还是按需求改一下吧)
仿真文件
先贴代码(因为verilog就是仿C的,这里直接使用了C的代码块)
`timescale 1ns / 1psmodule decoder_38_sim ();
// 输入端口
reg [2:0] data_in;
reg [2:0] en;
// 输出端口
wire [7:0] data_out;
// 结合自己的实现完成实例化
decoder_38 U_dec38_0(.data_i (data_in),.en_i (en),.data_o (data_out)
);
initial begin
// 构造输入激励信号#5 begin en = 3'b100; data_in = 3'b000; end#5 begin en = 3'b100; data_in = 3'b001; end#5 begin en = 3'b100; data_in = 3'b010; end#5 begin en = 3'b100; data_in = 3'b011; end#5 begin en = 3'b100; data_in = 3'b100; end#5 begin en = 3'b100; data_in = 3'b101; end#5 begin en = 3'b100; data_in = 3'b110; end#5 begin en = 3'b100; data_in = 3'b111; end// 使能端无效#5 begin en = 3'b101; data_in = 3'b000; end // 结束仿真#5 $stop;
end
endmodule
- 第一行,1ns是时间间隔,也就是仿真上的一个单位长度,但是其精度达到了1np,当然这些都是套话,不用管就行。
- module decoder_38_sim ()是文件创建自带的,我们不需要这个模块,不用管他
- 创建reg和wire型变量,眼尖的人就会看出这些变量刚好就是decoder_38的输入输出(reg输入wire输出),如果分不清reg和wire区别这样记也还好。
- reg需要赋初值,不然仿真会有不定态;wire千万别赋值,赋值biss
- 调用之前写好的译码器模块,调用注意事项:
- 首先要知道,sim和代码文件都是.v文件,也就意味着两者书写规则基本上差不多,只不过一个因为有变量赋值可以跑出来波形而已。
- 模块调用不但是这里,包括在源文件如果有多个模块,也需要这样调用,最后只能有一个顶层模块被使用。
- 模块调用的基本格式:被调模块+被调模块在该部分的小名+变量列表(小名的意义在于一个模块调用相同模块多次)
- 模块调用和高级语言的函数差不多,被调模块的输入输出都要给出。
- 模块调用的方式有两种,上面的形式比较标准,.被调模块变量名(调用模块变量名)不要搞反了,这种情况下变量顺序不做要求;
- 另外一种比较简短的形式就是直接调用,直接(data_in,en,data_out),这时候就不需要被调模块的变量名了,但是一定要对齐
仿真文件本质上就是调用模块并按照一定的时间给输入变量赋值,然后观看调用模块后的输出变量是怎样的,所以需要我们决定怎么赋值和赋值的时间问题。
赋值原则:要全面、要有边界条件(反正就是看着舒服,仿真的目的不就是让人放心吗)
#+数字:相隔时间,在initial语句中时间是累加的,
比如我先#5,那么这个语句就是在#5时有效;下一句#5则是在第十个时间单位有效。
always语句块略有不同,不过一般是在时序电路给时钟信号赋值才用得上,先不急。
仿真截图:(因为data_in没有初值,出现不定态,也就是红色部分)
约束文件
记一下模板就好
set_property -dict { IOSTANDARD LVCMOS33 PACKAGE_PIN 管脚名 } [get_ports 变量名]
不论是数组还是单个变量,我们都可以在板子的手册上找到对应的一个管脚,将其写上就行。
(这里的LVCMOS33表示高有效,一般用不上改)
另一种形式:
set_property PACKAGE_PIN 管脚名 [get_ports ]
set_property IOSTANDARD LVCMOS33 [get_ports 变量名]
(不就是拆开了吗,这种一般不用)
下板的后序操作在之前的博客有提到,这里不做赘述。
Verilog——38译码器(包括仿真文件和约束文件的格式)相关推荐
- 面试问题-理解数字后仿,其次针对性理解数字后仿中的sdf文件(约束文件)的作用
理解数字后仿,其次针对性理解数字后仿中的sdf文件(约束文件)的作用 1)什么是sdf文件 2)如何反标sdf文件? 1,什么是数字后仿? 2,什么是门级网表? 3,什么是sdf文件 4,如何反标sd ...
- verilog驱动ADC0809包括仿真测试
工程创建于vivado2018.2下 下面是功能概述: /************************************************************/ /****** ...
- 【 FPGA 】MATLAB 生成 FIR 滤波器的操作步骤(包括生成Verilog HDL代码以及仿真过程)
使用MATLAB生成滤波器有很多学问,这里只是作为初步的探索,和FPGA的更多结合,也正在探索中,相关博文例如:[ FPGA ]FIR滤波器目录,该专题目录正在记录我学习FIR滤波器的过程. MATL ...
- (147)Verilog编程:使用3-8译码器实现全减器
(147)Verilog编程:使用3-8译码器实现全减器 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Verilog编程:使用3-8译码器实现全减器: 5)结束语. ...
- Verilog快速入门(13)—— 用3-8译码器实现全减器
Verilog快速入门 (1) 四选一多路器 (2)异步复位的串联T触发器 (3)奇偶校验 (4)移位运算与乘法 (5)位拆分与运算 (6)使用子模块实现三输入数的大小比较 (7)4位数值比较器电路 ...
- 【 Vivado 】XDC文件的约束顺序
由于XDC约束是按顺序应用的,并且基于明确的优先级规则进行优先级排序,因此必须仔细检查约束的顺序. 如果多个物理约束发生冲突,则最新约束将获胜. 例如,如果通过多个XDC文件为I / O端口分配了不同 ...
- 记录使用Spartan-6 FPGA进行一次3-8译码器实验
之前仔细的记录过一次PWM蜂鸣器的实验,见博文:全过程实现一个最简单的FPGA项目之PWM蜂鸣器控制,这里就不再仔细的写下全过程了,因为都是一样的过程,只记录一下做这个小实验的思路即可. 3-8译码器 ...
- 3-8 译码器设计实验--VHDL
一.实验目的 (1)学习并掌握Quartus II的使用方法 (2)学习使用原理图方法进行逻辑设计输入,并初步了解可编程器件设计的全过程 (3)熟悉ALTERA公司EDA设计工具软件Quartusll ...
- verilog从txt中读取_Verilog中的文件操作
1.文件打开和关闭:首先定义integer指针,然后调用$fopen(file_name,mode)任务,不需要文件时,调用$fopen(file_name) 常用mode包括 "w&quo ...
- 用2片3-8译码器拼接成4-16译码器
用2片3-8译码器拼接成4-16译码器 一.实验内容 1.用两片74138译码器拼接成4-16译码器 2.验证仿真电路的正确性 3.注意观察输出信号的毛刺 二.实验步骤 1,新建工程 2,新建bdf文 ...
最新文章
- Windows Server 2016 TP5下载及测试序列号
- SimpleExecutor.doQuery()-创建StatementHandler
- LeetCode 375. 猜数字大小 II(DP)
- Spring实例化Bean
- spring boot 自动跳转登录页面_徒手撸一个扫码登录示例工程
- 计算机项目教学法探讨,【计算机教学论文】项目教学法在计算机教学中的应用(共3594字)...
- DeFi货币市场协议DMM宣布因监管部门的要求,已停止运营
- 在delphi原有控件基础上画图
- halcon视觉框架源码_图像处理与机器视觉初学者学习路线
- 非直连方式下C语言程序与数据库的消息交互流程
- 数据结构课程设计:运动会分数统计
- idea中安装uml工具插件
- 荣耀手机总显示无法连接服务器,荣耀继承者无法连接服务器是什么原因
- 移动机器人五种坐标系
- 一文搞懂H264量化原理以及计算过程
- java-php-python-ssm文献管理平台计算机毕业设计
- U盘无法格式化怎么办?
- sql经典面试题50题
- Python3修改电脑mac地址
- python区域找图_使用Imagemagick查找相似区域
热门文章
- 威联通nas怎么更换大硬盘_手把手教你威联通NAS怎么无损转移硬盘数据(TS-453Bmini)...
- 怎么修改html游戏存档,星露谷物语存档修改方法 如何修改游戏存档
- 实战 | 如何使用微搭低代码实现公差申请应用
- 1-junos基本操作
- sqlplus 命令导入数据文件
- 代码检测利器“利特莫斯”之优化血泪史
- 一文读懂Faster RCNN(大白话,超详细解析)
- 点餐系统数据库设计--SQL Server
- Navicat Premium 11.0.19中文破解版 安装
- 河南初中信息技术测试软件,中学信息技术考试练习系统——河南省版