Я знаю, что вопрос звучит странно и расплывчато, но у меня возникла проблема с обходом Verilog. У меня есть FSM, который должен использовать 4 7-сегментных дисплея, в одном состоянии он должен отображать только одно число на одном дисплее, в другом он должен использовать все 4 дисплея для отображения строки. Мой вопрос в том, как я могу обойти блоки always@ с такой проблемой. Я пытался установить в одном блоке Always@ два разных случая в блоке If else, но это не сработало. Пробовал также сделать два модуля один для числа, а другой для строки, назначив разные выходные порты, но дело в том, что он должен указывать на одни и те же аппаратные порты, и он не работает на битовом потоке.
Может ли кто-нибудь из вас дать мне несколько советов?
Хорошо, я выложу немного кода, но основная картина такова, что у меня есть главный конечный автомат, а затем я получил еще один конечный автомат. В зависимости от состояния другого FSM я вывожу номер состояния на дисплей. Но в другом состоянии главного конечного автомата я должен отображать сообщение на 4-сегментных дисплеях. Что я получил сейчас: здесь я использовал CLK, чтобы сделать сообщение
always@(BIN_IN or CLK) begin
if(FAIL==1) begin
case(state)
left:
begin
HEX_OUT [6:0] <= F;
SEG_SELECT_OUT <= 4'b0111;
state <= midleft;
end
midleft:
begin
HEX_OUT [6:0] <= A;
SEG_SELECT_OUT <= 4'b1011;
state <= midright;
end
//same for the rest
end
else begin
case (BIN_IN)
4'h0 : begin
HEX_OUT [6:0] <= 7'b1000000;
SEG_SELECT_OUT <= 4'b0111;
end
//same logic for the other cases
Используемая плата Xilinx Basys 3 с использованием инструмента синтеза vivado
Спасибо
always@(BIN_IN or CLK)
, и поведение RTL не будет соответствовать синтезированным вентилям. Как минимум, вам нужно изменить его наalways@(posedge CLK)
, чтобы сделать его синхронным. - person Greg   schedule 12.11.2015