【发布时间】:2015-11-12 02:02:51
【问题描述】:
我知道这个问题听起来很奇怪而且含糊不清,但我在使用 Verilog 时遇到了问题。 我有一个 FSM,它必须使用 4 个 7 段显示器,在一种状态下它应该在一个显示器上只显示一个数字,在另一种状态下它应该使用所有 4 个显示器来显示一个字符串。 我的问题是我如何才能真正解决这种问题的 always@ 块。 我尝试在 If else 块中设置一个 always@ 两个不同的情况,但没有成功。还尝试制作两个模块,一个用于数字,另一个用于字符串,分配不同的输出端口,但问题是它必须指向相同的硬件端口,并且在比特流上失败。
有人能给我一些建议吗?
好的,我会发布一些代码,但主要是我有一个主状态机,然后我有另一个状态机。根据其他 FSM 的状态,我在显示屏上输出状态编号。但在主状态机的不同状态下,我必须在 4 个 7 段显示器上显示一条消息。我现在得到的是: 这里我使用 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 综合工具
谢谢
【问题讨论】:
-
四个7段共享同一条数据线?如果不是,一个简单的 if else 语句就可以解决问题。
-
查看您正在使用的代码或您正在合成的电路板会很有帮助,因为可能的解决方案会因依赖这些因素的某些因素而异。
-
您正在用
always@(BIN_IN or CLK)推断组合逻辑,而 RTL 行为将与合成门不匹配。至少,您需要将其更改为always@(posedge CLK)以使其同步。
标签: verilog hardware xilinx hdl