我正在尝试消除设计中的位重冲击,并使用一个过程从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);
我尝试了几种不同的方法,但这是唯一不会出错的方法,但是由于该过程中的非阻塞分配,因此它当然不起作用,这意味着我的串行信号对于在波特率中指定的时间长度。
如何正确编写此过程?
您只需要将byte_in参数的类更改为常量:
procedure send_midi_byte (
constant 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;