vhdl - 用于发送串行字节的简单 VHDL 测试台程序?
问题描述
我正在尝试在我的设计中删除 bitbashing,并使用程序从 DUT 外部发送测试信号。序列化消息的格式是起始位为“0”,字节为 MSB 在前,停止位为“1”。线路在“1”处空闲。我认为我在使用要在过程和主进程之间传递的数据类型时遇到问题。
这是我的程序(波特率是串行时钟周期的时间常数):
procedure send_midi_byte (
signal byte_in : in std_logic_vector;
signal midi_out : out std_logic) is
begin
midi_out <= '0';
wait for baudrate;
for i in 7 to 0 loop
midi_out <= byte_in(i);
wait for baudrate;
end loop;
midi_out <= '1';
wait for baudrate;
end send_midi_byte;
这就是我如何调用它来发送几个字节(byte_slv 是一个 8 元素 std_logic_vector):
byte_slv <= x"90";
send_midi_byte(byte_slv, midi_in_int);
我尝试了几种不同的方法,这是唯一一种不会出错的方法,但是由于过程中的非阻塞分配,它当然不会起作用,这意味着我的串行信号的长度仅为“1”波特率指定的时间。
如何正确编写此程序?
解决方案
除了 Jim 的建议,在尝试其他任何操作之前修复循环范围并重试。7 to 0
是一个空范围;要么0 to 7
不是7 downto 0
。
非阻塞(关于分配)在 VHDL 中是一个没有意义的术语,但在过程中的循环内的信号分配绝对没问题。这是一项推迟的任务,计划在wait for baudrate
开始时进行。当然,这会等待指定的时间,并在完成后开始下一个循环迭代。
推荐阅读
- python - 如何装饰继承的方法 - Python
- javascript - Angular Toggle 类仅在单个 div 上
- python - 用于python插入的G套件管理员SDK
- sql - SQL 连接以在具有多个表的同一列上使用聚合函数
- r - ggplot2:对于具有离散 y 轴的每个组,将 geom_step() 向上轻推一点
- django - 部署时出现 Django NoReverseMatch 错误
- excel - Excel - 数据验证格式
- javascript - ajax 上传器(使用 nginx)
- java - 使用 apache commons compress library 压缩 InputStream
- php - 我希望我的代码从存储在数据库中的列中请求特定值