Vhdl 简单状态机问题

Vhdl 简单状态机问题,vhdl,fpga,state-machine,Vhdl,Fpga,State Machine,我有一个非常简单的FSM,它应该驱动外部RAM的一些输出信号。我遇到的问题是如何处理数据总线 可以是输入也可以是输出。。。我不太确定我该怎么处理 在我的FSM中,这是最好的例子。问题来自以下行: v.sram_data <= io_sram_data; v.sram\u数据 v、 sram_数据:=“00000000”; v、 sram_地址:=“0000”; v、 sram_rd:=“0”; v、 sram_wr:=“0”; v、 状态:=wr_数据; 当wr_数据=> io_

我有一个非常简单的FSM,它应该驱动外部RAM的一些输出信号。我遇到的问题是如何处理数据总线 可以是输入也可以是输出。。。我不太确定我该怎么处理 在我的FSM中,这是最好的例子。问题来自以下行:

  v.sram_data   <= io_sram_data;
v.sram\u数据
v、 sram_数据:=“00000000”;
v、 sram_地址:=“0000”;
v、 sram_rd:=“0”;
v、 sram_wr:=“0”;
v、 状态:=wr_数据;
当wr_数据=>
io_sram_数据
v、 sram_地址:=“0000”;
v、 sram_路:='1';
v、 sram_wr:=“0”;
v、 状态:=wr_数据;
当rd_数据=>

v、 sram_数据带
inout
s最好在顶层将其拆分为两个信号
data_从_外部
data_到_外部
。然后,较低级别需要实体上的三个元素,一个输入向量、一个输出向量和一个信号,以说明何时驱动外部数据。双向信号也不适合记录

然后,顶层需要执行以下操作:

data_pins <= data_to_outside when data_to_outside_enable = '1' else (others => 'Z');
data_from_outside <= data_pins;
data_pins'Z');

来自外部的数据同样,你使用了一个信号分配符号
,我支持马丁的观点

将双向性保留在顶层,然后将下面的所有逻辑保留为两条总线,一条输入总线和一条输出总线

输入总线始终与双向数据总线相同

然后,双向数据总线在输出有效时被指定为输出总线,在输出无效时被指定为Z

Z将被总线的实际输入状态覆盖

data_pins <= data_to_outside when data_to_outside_enable = '1' else (others => 'Z');
data_from_outside <= data_pins;
v.f := a;
s <= a;