描述方式

之前说过,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
  • 调用之前写好的译码器模块,调用注意事项:
  1. 首先要知道,sim和代码文件都是.v文件,也就意味着两者书写规则基本上差不多,只不过一个因为有变量赋值可以跑出来波形而已。
  2. 模块调用不但是这里,包括在源文件如果有多个模块,也需要这样调用,最后只能有一个顶层模块被使用。
  3. 模块调用的基本格式:被调模块+被调模块在该部分的小名+变量列表(小名的意义在于一个模块调用相同模块多次)
  4. 模块调用和高级语言的函数差不多,被调模块的输入输出都要给出。
  5. 模块调用的方式有两种,上面的形式比较标准,.被调模块变量名(调用模块变量名)不要搞反了,这种情况下变量顺序不做要求;
  6. 另外一种比较简短的形式就是直接调用,直接(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译码器(包括仿真文件和约束文件的格式)相关推荐

  1. 面试问题-理解数字后仿,其次针对性理解数字后仿中的sdf文件(约束文件)的作用

    理解数字后仿,其次针对性理解数字后仿中的sdf文件(约束文件)的作用 1)什么是sdf文件 2)如何反标sdf文件? 1,什么是数字后仿? 2,什么是门级网表? 3,什么是sdf文件 4,如何反标sd ...

  2. verilog驱动ADC0809包括仿真测试

    工程创建于vivado2018.2下 下面是功能概述: /************************************************************/ /******   ...

  3. 【 FPGA 】MATLAB 生成 FIR 滤波器的操作步骤(包括生成Verilog HDL代码以及仿真过程)

    使用MATLAB生成滤波器有很多学问,这里只是作为初步的探索,和FPGA的更多结合,也正在探索中,相关博文例如:[ FPGA ]FIR滤波器目录,该专题目录正在记录我学习FIR滤波器的过程. MATL ...

  4. (147)Verilog编程:使用3-8译码器实现全减器

    (147)Verilog编程:使用3-8译码器实现全减器 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Verilog编程:使用3-8译码器实现全减器: 5)结束语. ...

  5. Verilog快速入门(13)—— 用3-8译码器实现全减器

    Verilog快速入门 (1) 四选一多路器 (2)异步复位的串联T触发器 (3)奇偶校验 (4)移位运算与乘法 (5)位拆分与运算 (6)使用子模块实现三输入数的大小比较 (7)4位数值比较器电路 ...

  6. 【 Vivado 】XDC文件的约束顺序

    由于XDC约束是按顺序应用的,并且基于明确的优先级规则进行优先级排序,因此必须仔细检查约束的顺序. 如果多个物理约束发生冲突,则最新约束将获胜. 例如,如果通过多个XDC文件为I / O端口分配了不同 ...

  7. 记录使用Spartan-6 FPGA进行一次3-8译码器实验

    之前仔细的记录过一次PWM蜂鸣器的实验,见博文:全过程实现一个最简单的FPGA项目之PWM蜂鸣器控制,这里就不再仔细的写下全过程了,因为都是一样的过程,只记录一下做这个小实验的思路即可. 3-8译码器 ...

  8. 3-8 译码器设计实验--VHDL

    一.实验目的 (1)学习并掌握Quartus II的使用方法 (2)学习使用原理图方法进行逻辑设计输入,并初步了解可编程器件设计的全过程 (3)熟悉ALTERA公司EDA设计工具软件Quartusll ...

  9. verilog从txt中读取_Verilog中的文件操作

    1.文件打开和关闭:首先定义integer指针,然后调用$fopen(file_name,mode)任务,不需要文件时,调用$fopen(file_name) 常用mode包括 "w&quo ...

  10. 用2片3-8译码器拼接成4-16译码器

    用2片3-8译码器拼接成4-16译码器 一.实验内容 1.用两片74138译码器拼接成4-16译码器 2.验证仿真电路的正确性 3.注意观察输出信号的毛刺 二.实验步骤 1,新建工程 2,新建bdf文 ...

最新文章

  1. Windows Server 2016 TP5下载及测试序列号
  2. SimpleExecutor.doQuery()-创建StatementHandler
  3. LeetCode 375. 猜数字大小 II(DP)
  4. Spring实例化Bean
  5. spring boot 自动跳转登录页面_徒手撸一个扫码登录示例工程
  6. 计算机项目教学法探讨,【计算机教学论文】项目教学法在计算机教学中的应用(共3594字)...
  7. DeFi货币市场协议DMM宣布因监管部门的要求,已停止运营
  8. 在delphi原有控件基础上画图
  9. halcon视觉框架源码_图像处理与机器视觉初学者学习路线
  10. 非直连方式下C语言程序与数据库的消息交互流程
  11. 数据结构课程设计:运动会分数统计
  12. idea中安装uml工具插件
  13. 荣耀手机总显示无法连接服务器,荣耀继承者无法连接服务器是什么原因
  14. 移动机器人五种坐标系
  15. 一文搞懂H264量化原理以及计算过程
  16. java-php-python-ssm文献管理平台计算机毕业设计
  17. U盘无法格式化怎么办?
  18. sql经典面试题50题
  19. Python3修改电脑mac地址
  20. python区域找图_使用Imagemagick查找相似区域

热门文章

  1. 威联通nas怎么更换大硬盘_手把手教你威联通NAS怎么无损转移硬盘数据(TS-453Bmini)...
  2. 怎么修改html游戏存档,星露谷物语存档修改方法 如何修改游戏存档
  3. 实战 | 如何使用微搭低代码实现公差申请应用
  4. 1-junos基本操作
  5. sqlplus 命令导入数据文件
  6. 代码检测利器“利特莫斯”之优化血泪史
  7. 一文读懂Faster RCNN(大白话,超详细解析)
  8. 点餐系统数据库设计--SQL Server
  9. Navicat Premium 11.0.19中文破解版 安装
  10. 河南初中信息技术测试软件,中学信息技术考试练习系统——河南省版