【发布时间】:2020-02-28 17:07:23
【问题描述】:
我正在尝试在我的设计中移除 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”波特率指定的时间长度。
如何正确编写这个程序?
【问题讨论】:
-
修复循环范围并在尝试任何其他方法之前重试。