亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> VHDL

掌握std_logic_vector:在VHDL中创建信号向量

std_logic_vector类型是VHDL定义信号总线的标准。std_logic建模单根线状态,std_logic_vector将其扩展为线阵列,实现多位总线表示。

与单比特std_logic不同,std_logic_vector是复合类型——std_logic元素的索引集合。可容纳任意位数,适合连接交换多位数据的组件。

本文属基础VHDL教程系列。

声明std_logic_vector信号语法:
signal <name> : std_logic_vector(<lsb> to <msb>) := <initial_value>;
或
signal <name> : std_logic_vector(<msb> downto <lsb>) := <initial_value>;
其中<name>为用户标识符,<initial_value>可选。<lsb>和<msb>分别为最低和最高有效位索引。

to或downto指定范围方向(即大小端)。两者均可,但多数设计师偏好downto清晰明了。我建议声明位向量时始终用downto避免混淆。

字节大小向量VHDL代码:

signal MySlv : std_logic_vector(7 downto 0);

一位向量VHDL代码:

signal MySlv : std_logic_vector(0 downto 0);

空范围(零位)VHDL代码:

signal MySlv : std_logic_vector(-1 downto 0);

练习

本视频教程学习声明std_logic_vector信号并给初始值。也学用For循环遍历向量位创建移位寄存器:

本教程创建的最终代码:

 library ieee; use ieee.std_logic_1164.all; entity T11_StdLogicVectorTb is end entity; architecture sim of T11_StdLogicVectorTb is signal Slv1 : std_logic_vector(7 downto 0); signal Slv2 : std_logic_vector(7 downto 0) := (others => '0'); signal Slv3 : std_logic_vector(7 downto 0) := (others => '1'); signal Slv4 : std_logic_vector(7 downto 0) := x"AA"; signal Slv5 : std_logic_vector(0 to 7) := "10101010"; signal Slv6 : std_logic_vector(7 downto 0) := "00000001"; begin -- Shift register process is begin wait for 10 ns; for i in Slv6'left downto Slv6'right + 1 loop Slv6(i) <= Slv6(i-1); end loop; Slv6(Slv6'right) <= Slv6(Slv6'left); end process; end architecture; 

ModelSim按运行并放大时间线后的波形窗口:掌握std_logic_vector:在VHDL中创建信号向量

分析

本练习声明六个std_logic_vector总线,每个八位长(一字节)。

信号Slv1未给初始值。波形截图中总线显示XX,因十六进制显示无法表示未知值。仔细看各位实际为U。

信号Slv2用聚合赋值(others => '0')置所有位零。此简洁语法确保无论向量宽度每个元素获指定值。

信号Slv3用相同聚合技术初始化所有位为一,波形显示FF(八个1的十六进制)。

信号Slv4演示十六进制初始化:AA。每个十六进制数字映射四位,两数字覆盖8位向量。

信号Slv5含相同值但用二进制10101010表达。Slv4和Slv5波形均渲染为AA。

信号Slv6起始全零除最低有效位为1。进程实现左移寄存器,每10ns将1在向量中循环。

进程利用left和right属性保持代码通用;调整向量大小无需改代码。

存在其他属性但超出入门教程范围。

掌握std_logic_vector:在VHDL中创建信号向量

要点

参加基础VHDL测验–第2部分 »
或
进入下一教程 »

VHDL

  1. VHDL类型转换全攻略:Numeric_Std与Std_Logic_Arith包详解
  2. 掌握VHDL有符号与无符号类型:实战洞察
  3. VHDL 字符串列表创建:最佳实践与示例
  4. 基于 Tcl 驱动的 VHDL 密码锁模块测试平台
  5. 优雅结束 VHDL 测试平台仿真
  6. VHDL 实现 PWM 控制器:设计、仿真与 FPGA 演示
  7. VHDL 生成随机数:从均匀分布到 OSVVM
  8. 在块RAM中设计健壮的VHDL环形缓冲区FIFO
  9. 构建VHDL自检测试平台实战指南
  10. 用VHDL受保护类型和访问指针实现动态链表
  11. 利用进程内过程简化VHDL状态机设计
  12. 掌握VHDL函数:高效设计实战指南