首页 > 解决方案 > 用于发送串行字节的简单 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”波特率指定的时间。

如何正确编写此程序?

标签: vhdlfpgahdl

解决方案


除了 Jim 的建议,在尝试其他任何操作之前修复循环范围并重试。7 to 0是一个空范围;要么0 to 7不是7 downto 0

非阻塞(关于分配)在 VHDL 中是一个没有意义的术语,但在过程中的循环内的信号分配绝对没问题。这是一项推迟的任务,计划在wait for baudrate开始时进行。当然,这会等待指定的时间,并在完成后开始下一个循环迭代。


推荐阅读