Verilog实战:3-8译码器与数码管动态显示教程

需积分: 50 1 下载量 108 浏览量 更新于2024-07-27 收藏 219KB DOC 举报
Verilog是一种广泛用于硬件描述语言(HDL)的高级语言,用于设计和实现数字逻辑系统,如集成电路(ICs)和可编程逻辑器件(FPGA)。在这个资源中,主要介绍了两个基础的Verilog程序示例:3-8译码器和1位数码管动态显示。 首先,3-8译码器是一个重要的逻辑门电路,它接受三个输入(key_in,通常来自拨码开关或键输入),并输出8个不同的信号,代表输入的不同组合。这个程序模块名为`decoder_38`,其核心部分是一个`always @(key_in)`语句,通过`case`结构根据输入`key_in`的值(0-7)设置输出`out`的状态。每个输出对应一个特定的LED灯,这些LED灯的工作模式是低电平有效,实现了对输入数据的编码转换。 接着,1位数码管动态显示部分展示了如何使用Verilog实现简单的数字显示。`SMG_LED`模块接收系统时钟`clk_50M`和复位信号`rst`,以及数码管的数据输入`dataout`和位选择信号`led_bit`。程序使用了一个分频计数器`count`来控制数码管的刷新频率,通过`always @(posedge clk_50M)`更新计数器,并在`always @(posedge rst)`时将`led_bit`置零以开始一个新的显示周期。`case`结构同样在这里被用来根据计数器的值(范围0-15)设置`dataout`,以便在数码管上显示0到9和A-F的数字。 这两个例子旨在帮助初学者理解Verilog的基本语法、数据类型和逻辑控制结构,如`reg`变量、`case`语句和`always`块的使用。它们不仅有助于掌握编程技巧,还展示了如何在实际硬件设计中将逻辑电路抽象成可读性强的代码。通过实践这些基础程序,学习者可以逐步提升对Verilog的理解和应用能力,为进一步深入学习和复杂电路设计打下坚实的基础。
2009-10-25 上传
目 录 译者序 前言 第1章 简介 1 1.1 什么是Verilog HDL? 1 1.2 历史 1 1.3 主要能力 1 第2章 HDL指南 4 2.1 模块 4 2.2 时延 5 2.3 数据流描述方式 5 2.4 行为描述方式 6 2.5 结构化描述形式 8 2.6 混合设计描述方式 9 2.7 设计模拟 10 第3章 Verilog语言要素 14 3.1 标识符 14 3.2 注释 14 3.3 格式 14 3.4 系统任务和函数 15 3.5 编译指令 15 3.5.1 `define和`undef 15 3.5.2 `ifdef、`else 和`endif 16 3.5.3 `default_nettype 16 3.5.4 `include 16 3.5.5 `resetall 16 3.5.6 `timescale 16 3.5.7 `unconnected_drive和 `nounconnected_drive 18 3.5.8 `celldefine 和 `endcelldefine 18 3.6 值集合 18 3.6.1 整型数 18 3.6.2 实数 19 3.6.3 字符串 20 3.7 数据类型 20 3.7.1 线网类型 20 3.7.2 未说明的线网 23 3.7.3 向量和标量线网 23 3.7.4 寄存器类型 23 3.8 参数 26 第4章 表达式 28 4.1 操作数 28 4.1.1 常数 28 4.1.2 参数 29 4.1.3 线网 29 4.1.4 寄存器 29 4.1.5 位选择 29 4.1.6 部分选择 29 4.1.7 存储器单元 30 4.1.8 函数调用 30 4.2 操作符 30 4.2.1 算术操作符 31 4.2.2 关系操作符 33 4.2.3 相等关系操作符 33 4.2.4 逻辑操作符 34 4.2.5 按位操作符 35 4.2.6 归约操作符 36 4.2.7 移位操作符 36 4.2.8 条件操作符 37 4.2.9 连接和复制操作 37 4.3 表达式种类 38 第5章 门电平模型化 39 5.1 内置基本门 39 5.2 多输入门 39 5.3 多输出门 41 5.4 三态门 41 5.5 上拉、下拉电阻 42 5.6 MOS开关 42 5.7 双向开关 44 5.8 门时延 44 5.9 实例数组 45 5.10 隐式线网 45 5.11 简单示例 46 5.12 2-4解码器举例 46 5.13 主从触发器举例 47 5.14 奇偶电路 47 第6章 用户定义的原语 49 6.1 UDP的定义 49 6.2 组合电路UDP 49 6.3 时序电路UDP 50 6.3.1 初始化状态寄存器 50 6.3.2 电平触发的时序电路UDP 50 6.3.3 边沿触发的时序电路UDP 51 6.3.4 边沿触发和电平触发的混合行为 51 6.4 另一实例 52 6.5 表项汇总 52 第7章 数据流模型化 54 7.1 连续赋值语句 54 7.2 举例 55 7.3 线网说明赋值 55 7.4 时延 55 7.5 线网时延 57 7.6 举例 57 7.6.1 主从触发器 57 7.6.2 数值比较器 58 第8章 行为建模 59 8.1 过程结构 59 8.1.1 initial 语句 59 8.1.2 always语句 61 8.1.3 两类语句在模块中的使用 62 8.2 时序控制 63 8.2.1 时延控制 63 8.2.2 事件控制 64 8.3 语句块 65 8.3.1 顺序语句块 66 8.3.2 并行语句块 67 8.4 过程性赋值 68 8.4.1 语句内部时延 69 8.4.2 阻塞性过程赋值 70 8.4.3 非阻塞性过程赋值 71 8.4.4 连续赋值与过程赋值的比较 72 8.5 if 语句 73 8.6 case语句 74 8.7 循环语句 76 8.7.1 forever 循环语句 76 8.7.2 repeat 循环语句 76 8.7.3 while 循环语句 77 8.7.4 for 循环语句 77 8.8 过程性连续赋值 78 8.8.