verilog中的单向开关
我需要保留一个值,这样一旦它切换到1,它就不会切换回零 我正在尝试为FPGA板制作一个刽子手游戏。为此,我有一个常量verilog中的单向开关,verilog,Verilog,我需要保留一个值,这样一旦它切换到1,它就不会切换回零 我正在尝试为FPGA板制作一个刽子手游戏。为此,我有一个常量onesLetter,它是要显示的正确字母。用户必须猜测字母。一旦正确猜测了onesLetter,我想显示它,并在其他猜测过程中继续显示它(而不是恢复到默认显示) 以下是我的想法: // onesLetter is a constant we are checking against // tempBooleanOnes represents if letter is curren
onesLetter
,它是要显示的正确字母。用户必须猜测字母。一旦正确猜测了onesLetter
,我想显示它,并在其他猜测过程中继续显示它(而不是恢复到默认显示)
以下是我的想法:
// onesLetter is a constant we are checking against
// tempBooleanOnes represents if letter is currently being guessed
// tempSeg is input to check against onesLetter
// boolean is an input bit
wire tempBooleanOnes = (boolean && (onesLetter == tempSeg));
// Represent whether letter has been guessed or not
wire booleanOnes;
// Whether letter has been guessed or is being guessed
assign booleanOnes = (booleanOnes) || (tempBooleanOnes);
这就是我需要实现的表达式。但是,我得到一个错误,说我不能对指定的连接和表达式使用布尔函数。我尝试使用我实现的模块寄存器(输出、输入、时钟、启用、重置)
,启用为~booleanOnes
(当已经1或已经猜测时不要覆盖),输出为booleanOnes
,但这也会引发错误
这是我用来代替assign
语句的寄存器模块的代码
register regOnes(booleanOnes, tempBooleanOnes, clk, ~booleanOnes, 1'b0);
你不应该这样做:
assign booleanOnes = (booleanOnes) || (tempBooleanOnes);
因为您在同一条导线上进行分配
此代码将booleanOnes
设置为1,并且永远不会重置
reg booleanOnes = 0;
always @* begin
if(boolean && (onesLetter == tempSeg)) begin
booleanOnes = 1;
end
end
使用寄存器时会出现什么错误(哪一个是正确的想法)?你能用tempBoleansOnes
和其他工具以及register
模块的实现来发布完整的模块吗?这样我们就可以更好地找出你的错误了?用这个表达式你可以创建一个反馈环,即缓冲区,输出连接到它自己的输入。因此,它没有硬件意义。您需要创建一个模型,该模型使用一个执行您所需操作的状态机。这也意味着使用时钟和触发器。