用于发送串行字节的简单VHDL测试台程序?

问题描述 投票:0回答:1

我正在尝试消除设计中的位重冲击,并使用一个过程从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);

我尝试了几种不同的方法,但这是唯一不会出错的方法,但是由于该过程中的非阻塞分配,因此它当然不起作用,这意味着我的串行信号对于在波特率中指定的时间长度。

如何正确编写此过程?

vhdl fpga hdl
1个回答
0
投票

您只需要将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;
© www.soinside.com 2019 - 2024. All rights reserved.