verilog中的单向切换

时间:2017-12-02 00:16:09

标签: verilog

我需要保持一个值,这样一旦切换到1,它就不会切换回零。

我正在尝试为FPGA板制作一个Hangman游戏。为此,我有一个常量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用于指定的连线和表达式。我已尝试使用我已实现的模块register (output, input, clock, enable, reset),其中enable为~booleanOnes(当已经为1时已被覆盖,或已经猜到),输出为booleanOnes,但是这也会引发错误。

这是我试过的寄存器模块的代码,而不是assign语句。

register regOnes(booleanOnes, tempBooleanOnes, clk, ~booleanOnes, 1'b0);

1 个答案:

答案 0 :(得分:1)

你不应该这样做:

assign booleanOnes = (booleanOnes) || (tempBooleanOnes);

因为你要分配到同一条线路。

此代码将booleanOnes设置为1,永远不会重置。

reg booleanOnes = 0; 
always @* begin
   if(boolean && (onesLetter == tempSeg)) begin
       booleanOnes = 1;
   end
end