Verilog:如果出现电线状况该如何处理?

时间:2019-05-30 15:13:24

标签: verilog

问题从这里继续:Why is wire variable causing illegal left-hand side in continuous assignment?

下面是我经过调整的代码,但仍然存在在同一b下协调Y(这是一个规则)和if(这是一条线)的问题条件。我得到的是,必须将导线视为与其连接的组合的结果,不能仅仅为其分配值,当然也不能将其视为自身的函数。以及所有关于不允许使用assign进行调节或不能在if块中使用导线的东西。

但是问题是一旦计算出b,并且如果b!=0,我该如何纠正第 b 个位错误(Y[b])并得到它从1翻转到0,反之亦然?

// Hamming code 1-bit error correction
module HCG(I,e,O);
  input [4:1] I;   // input BCD
  input [7:1] e;   // noise simulation
  wire [7:1] X;    // Hamming code
  wire [7:1] Y;     // Hamming code after addition of noise
  wire [3:1] P;     // Parity at start
  wire [3:1] S;    // Parity at end
  integer b;       // the error bit    
  output [4:1] O;  // corrected output

  assign X[1]=I[1]^I[2]^I[4];   // Hamming code generator
  assign X[2]=I[1]^I[3]^I[4];
  assign X[3]=I[1];
  assign X[4]=I[2]^I[3]^I[4];
  assign X[5]=I[2];
  assign X[6]=I[3];
  assign X[7]=I[4];

  assign P[1]=X[1]; // Parity at start
  assign P[2]=X[2];
  assign P[3]=X[4];

  assign Y[1]=e[1]^X[1]; // noise added
  assign Y[2]=e[2]^X[2];
  assign Y[3]=e[3]^X[3];
  assign Y[4]=e[4]^X[4];
  assign Y[5]=e[5]^X[5];
  assign Y[6]=e[6]^X[6];
  assign Y[7]=e[7]^X[7];

  assign S[1]=Y[3]^Y[5]^Y[7]; // Parity at end
  assign S[2]=Y[3]^Y[6]^Y[7];
  assign S[3]=Y[5]^Y[6]^Y[7];

  always @(I,e)
  begin
    b=0; // initialize b to zero
  if(S[1]!=P[1])
    b=b+1;
  if(S[2]!=P[2]) // b is cumulative if each of the conditions is true
    b=b+2;
  if(S[3]!=P[3])
    b=b+4;
  if(b!=0)
    begin
    Y[b]=!(Y[b]); // HOW TO CORRECT THIS?
    end
  end

  assign O[1]=Y[3]; // assigning outputs
  assign O[2]=Y[5];
  assign O[3]=Y[6];
  assign O[4]=Y[7];

endmodule

2 个答案:

答案 0 :(得分:0)

正如我在评论中所说:您的代码非常……不理想。所以这里我只回答:

  

Y [b] =!(Y [b]); //如何纠正这个问题?

如果您写Y [b] =!(Y [b])(并且不涉及任何时钟),您将进行组合循环:Y [b]变为非Y [b],立即变为非-非Y [b],立即变成非非Y [b]等。

您必须使用前向工作逻辑:创建一个新变量,例如Z等于Y,但是位b(b!= 0)取反。

always @( * )
   case (b)
   1 : Z = Y ^ 4'b0010;
   2 : Z = Y ^ 4'b0100;
   3 : Z = Y ^ 4'b1000;
   default : Z = Y;
   endcase

(如果您熟悉各种逻辑运算的工作原理,当然也有帮助。)

未经测试,可能出现错字

答案 1 :(得分:0)

所以我的问题是,当我真的无法更改<button class="fontButton" onClick="addField()">&plus;</button> <form id="tasksDataForm"> <div id="fieldsDiv"></div> <div id="submitDiv"></div> </form> <script> var tasks = document.getElementById("fieldsDiv"); function addField() { var tasksDataFields = `<br/> <input type="text"> <br/>`; var submitDiv = document.getElementById("submitDiv"); if(submitDiv.innerHTML == '') submitDiv.innerHTML += '<input type="submit" value="Save">'; tasks.innerHTML += tasksDataFields; } </script> 时(除非定义它的输入或导线更改了),我试图更改它。我通过使新变量Y接受reg z的值,然后改为翻转Y b th位来解决了这个问题。

Z