gpt4 book ai didi

Verilog - 始终敏感列表

转载 作者:行者123 更新时间:2023-12-04 04:59:33 27 4
gpt4 key购买 nike

我希望将四个基本运算(乘法、加法、减法和除法)映射到位于我的 FPGA 板上的四个键之一。我有一个 if 语句,它会检查按下哪个键并执行适当的语句。但是,无论我在块中放置什么,写入始终块敏感度列表时,它都不会识别所有四个键。如果我将灵敏度块留空,那么它将识别所有键,但将执行第一个键的操作并等待按下其他键以执行这些操作。

always @(negedge KEY) begin
if (KEY[0] == 0) begin
...
end else if(KEY[1] == 0) begin
//Check for value for A and B
if(SW[15:8] < SW[7:0]) begin
...
end
end else if(KEY[2] == 0) begin
...
end
end

实现这样的代码将只计算连接到 KEY1 的操作。其余的键就像它们没有被编程一样。有什么办法可以解决这个小烦恼吗?

谢谢!

最佳答案

除非您正在对时钟触发器进行建模,否则您应该始终对组合块使用默认 (@*) 灵敏度列表。没有仅对信号的负沿敏感的可合成组合电路。

如果您真的只想在最初按下某个键时执行某些操作,请将键状态与存储在寄存器中的前一个时钟沿的键值进行比较。

always @* begin
if(key[0] && !key_last[0]) begin
//assert some signal on key0 press
end
if(key[1] ...) begin
//assert on key1 press
end
end

always @(posedge clock) key_last <= key;

如果您打算检查多个键的状态,则不应使用 if/else 语句,因为这将在第一个 true 语句后停止检查。只需编写四个单独的 if 语句。

关于Verilog - 始终敏感列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16312116/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com