Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Verilog更改变量的值_Verilog_Fpga - Fatal编程技术网

Verilog更改变量的值

Verilog更改变量的值,verilog,fpga,Verilog,Fpga,我正在实现一个简单的计数器,它计算按下按钮的时间。我编写了以下代码: module lock( anodes,cathodes,leds, sw,btns,clk ); //input declarations input[7:0] sw; input[3:0]btns; input clk; always @(curbtns) begin if( prevbtns!=0 && curbtns==0) begin counter_next = counter + 5

我正在实现一个简单的计数器,它计算按下按钮的时间。我编写了以下代码:

module lock(
anodes,cathodes,leds,
sw,btns,clk );

//input declarations
input[7:0] sw;
input[3:0]btns;
input clk;


always @(curbtns)
begin
if( prevbtns!=0 && curbtns==0)
begin
    counter_next = counter + 5'b00001;
end
else
    counter_next = counter;
prevbtns = curbtns;
end


always @(btns or sw)
begin
case(btns)
4'b0001:curbtns=4'b0001;
4'b0010:curbtns=4'b0010;
4'b0100:curbtns=4'b0100;
4'b1000:curbtns=4'b1000;
4'b0000:curbtns=4'b0000;
default:curbtns = prevbtns; 
endcase
end

always @(posedge clk)
begin
counter <=counter_next;
create_slow_clock(clk,slow_clock);
end
endmodule
模块锁(
阳极、阴极、LED、,
西南、基站、时钟);
//输入声明
输入[7:0]sw;
输入[3:0]个基站;
输入时钟;
始终@(路缘石)
开始
如果(prevbtns!=0&&curbtns==0)
开始
计数器_next=计数器+5'b00001;
结束
其他的
计数器\下一个=计数器;
prevbtns=路缘tns;
结束
始终@(BTN或sw)
开始
案例(btns)
4'b0001:curbtns=4'b0001;
4'b0010:curbtns=4'b0010;
4'b0100:路缘石=4'b0100;
4'b1000:curbtns=4'b1000;
4'b0000:路缘石=4'b0000;
默认值:curbtns=prevbtns;
尾声
结束
始终@(posedge clk)
开始

计数器您的组合always块的灵敏度列表中似乎缺少一些信号

为了使代码能够正确合成,组合块必须对每个输入信号敏感

第一个始终块
always@(路缘)
需要对
prevbtns
路缘
计数器敏感

第二个块
always@(BTN或sw)
也需要对
prevBTN
敏感(我没有看到在这个块中使用
sw
,应该去掉它)


我建议将这两个块都更改为
始终@*
,以便可以自动推断列表,并且如果您更改逻辑而忘记更改列表,这不是一个脆弱的破坏点

在组合始终块的灵敏度列表中,您似乎缺少一些信号

为了使代码能够正确合成,组合块必须对每个输入信号敏感

第一个始终块
always@(路缘)
需要对
prevbtns
路缘
计数器敏感

第二个块
always@(BTN或sw)
也需要对
prevBTN
敏感(我没有看到在这个块中使用
sw
,应该去掉它)


我建议将这两个块都更改为
始终@*
,以便可以自动推断列表,并且如果您更改逻辑而忘记更改列表,这不是一个脆弱的破坏点

是的,我的Xilinix对敏感度列表提出了警告。但是,如果我将PrevBTN添加到带有路缘TNS的always block中,它不会产生一个循环,因为我在always block中分配PrevBTN吗?是的,你是对的。但是请注意,您已经使用
prevbtns在块中设计了一个循环=0
作为您的输入之一。在我看来,PrevBTN需要更改为时钟寄存器以删除反馈回路。在一个纯粹的组合块中不能有任何反馈。是的,现在我明白了我在某个地方读到的意思,在“if”语句中使用变量就像在表达式的右边使用它一样。所以现在我需要以某种方式将“PrevBTN”移出always块。但是现在我关心的另一件事是,如果我在其他块中设置“prevbtns”,我将如何确保这两个块之间的同步???
prevbtns
应该被锁定,没有同步问题<代码>always@(posedge clk)prevbtns我已经更新了代码(尽管只需要移动一行),并且它也在工作。我对同步的意思是,在我看来,我的“prevbtn”只有在执行了条件“if(prevbtns!=0&&curbtns==0)”之后才能更新。我们是如何通过在+ve时钟和非阻塞分配设置“PrevBTN”来实现这一点的?是的,我的Xilinix正在就敏感度列表向我发出警告。但是,如果我将PrevBTN添加到带有路缘TNS的always block中,它不会产生一个循环,因为我在always block中分配PrevBTN吗?是的,你是对的。但是请注意,您已经使用
prevbtns在块中设计了一个循环=0
作为您的输入之一。在我看来,PrevBTN需要更改为时钟寄存器以删除反馈回路。在一个纯粹的组合块中不能有任何反馈。是的,现在我明白了我在某个地方读到的意思,在“if”语句中使用变量就像在表达式的右边使用它一样。所以现在我需要以某种方式将“PrevBTN”移出always块。但是现在我关心的另一件事是,如果我在其他块中设置“prevbtns”,我将如何确保这两个块之间的同步???
prevbtns
应该被锁定,没有同步问题<代码>always@(posedge clk)prevbtns我已经更新了代码(尽管只需要移动一行),并且它也在工作。我对同步的意思是,在我看来,我的“prevbtn”只有在执行了条件“if(prevbtns!=0&&curbtns==0)”之后才能更新。我们如何通过在+ve时钟和非阻塞分配设置“PrevBTN”来实现这一点?
always @(curbtns or prevbtns or counter)
begin
 if( prevbtns!=0 && curbtns==0)
 begin
 counter_next = counter + 5'b00001;
 end
 else
 counter_next = counter;
end

always @(posedge clk)
begin
counter <=counter_next;
prevbtns <=curbtns;
create_slow_clock(clk,slow_clock);
end