Verilog中两个变量的逐位比较
目前,为了一个想法,我开始用Verilog编写固件。它是在两个变量之间逐位比较,然后使用一个二进制计数器来计算不同位数 例如: 我在verilog中有两个变量 A:8'b00100001 B:8'b01000000 然后我给出了在两个变量之间逐位比较的条件。若在同一位位置A的1位和B的1位之间存在差异,则二进制计数器将计数 这是我的verilog代码:Verilog中两个变量的逐位比较,verilog,xilinx,Verilog,Xilinx,目前,为了一个想法,我开始用Verilog编写固件。它是在两个变量之间逐位比较,然后使用一个二进制计数器来计算不同位数 例如: 我在verilog中有两个变量 A:8'b00100001 B:8'b01000000 然后我给出了在两个变量之间逐位比较的条件。若在同一位位置A的1位和B的1位之间存在差异,则二进制计数器将计数 这是我的verilog代码: module BERT_test( input CLK, input RST, input [7:0] SIG_IN, inpu
module BERT_test(
input CLK,
input RST,
input [7:0] SIG_IN,
input [7:0] SIG_OUT,
output [7:0] NUM_ERR
);
integer i;
reg[7:0] sign_in;
reg[7:0] sign_out;
always @(posedge CLK) begin
sign_in[7:0] <= SIG_IN[7:0];
sign_out[7:0] <= SIG_OUT[7:0];
end
reg [15:0] bit_err;
// Combinational Logic
always @* begin
bit_err = 8'b0;
for (i=0;i<8;i=i+1) begin
if (sign_in[i] == sign_out[i]) begin
bit_err = bit_err + 8'b0;
end else begin
bit_err = bit_err + 8'b1;
end
end
assign NUM_ERR = bit_err;
end
endmodule
模块BERT\u测试(
输入时钟,
输入RST,
输入[7:0]信号输入,
输入[7:0]信号输出,
输出[7:0]个错误
);
整数i;
注册[7:0]登录;
注册[7:0]注销;
始终@(posedge CLK)开始
登录[7:0]您正在从always块驾驶NUM\u ERR
(网络)。不允许从始终块(或初始块)驱动网络。您需要移动此行:
assign NUM_ERR = bit_err;
总是在街区外
不应在always块中使用assign语句。这是合法的,但被弃用,意味着一些奇怪的东西。如果您错误地将这一行包含在always块中,那么正确缩进代码将显示它。您正在从always块驱动NUM\u ERR
(一个网络)。不允许从始终块(或初始块)驱动网络。您需要移动此行:
assign NUM_ERR = bit_err;
总是在街区外
不应在always块中使用assign语句。这是合法的,但被弃用,意味着一些奇怪的东西。如果您错误地将这一行包含在always块中,那么正确缩进代码将显示它。您在always块中有一个赋值。把它搬到外面去
如果位相同,则将零对位错误相加是多余的
if (sign_in[i] != sign_out[i])
bit_err = bit_err + 8'b1;
此外,位错误为16位,因此添加8'b1并不错误,但会产生误导。您在always块中有一个赋值。把它搬到外面去
如果位相同,则将零对位错误相加是多余的
if (sign_in[i] != sign_out[i])
bit_err = bit_err + 8'b1;
此外,位错误为16位,因此添加8'b1并没有错,但会产生误导。您说过您选择verilog进行位比较。我没听错吧?FYI,你可以用其他任何语言来做,C,C++,java,python,perl,……你说你选择了verilog进行位比较。我没听错吧?FYI,你可以用其他任何语言来做,C,C++,java,python,perl,…