Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Encryption Verilog分配结果为';x';在LHS中,而RHS具有有效值_Encryption_Verilog - Fatal编程技术网

Encryption Verilog分配结果为';x';在LHS中,而RHS具有有效值

Encryption Verilog分配结果为';x';在LHS中,而RHS具有有效值,encryption,verilog,Encryption,Verilog,这个问题我已经解决了两天了,我解决不了。 在这个verilog加密代码中,我在这一行中有一个赋值:sumOut=out,当我尝试使用ModelSim调试它时,netout有一个有效值,但是sumOut保持未定义x。 代码如下: `include "adder.v" module processData(dataOut0, dataOut1, dataIn0, dataIn1, key0, key1, key2, key3, sumIn, sumOut, delta, clk, rst, fin

这个问题我已经解决了两天了,我解决不了。 在这个verilog加密代码中,我在这一行中有一个赋值:
sumOut=out
,当我尝试使用ModelSim调试它时,net
out
有一个有效值,但是
sumOut
保持未定义
x
。 代码如下:

`include "adder.v"

module processData(dataOut0, dataOut1, dataIn0, dataIn1, key0, key1, key2, key3, sumIn, sumOut, delta, clk, rst, finish);

output reg [1:32] dataOut0, dataOut1, sumOut;
output reg finish;

input [1:32] dataIn0, dataIn1, key0, key1, key2, key3, sumIn, delta;
input clk, rst;

reg [1:32] in1, in2, first, second, third, tsum;
wire [1:32] out;

integer cnt;

adder add(out, in1, in2);

always @(posedge clk or negedge rst)
begin
    if(!rst)
    begin
        cnt = 0;
        finish = 0;
        //sumOut = 0;
    end
    else
    begin
        if(cnt == 0)
        begin
            in1 = sumIn; 
            in2 = delta;
            sumOut = out;
            cnt = cnt + 1;
        end
        else if(cnt == 1)
        begin
            in1 = dataIn1 << 4;
            in2 = key0;
            first = out;
            cnt = cnt + 1;
        end
        else if(cnt == 2)
        begin
            in1 = dataIn1; 
            in2 = sumOut;
            second = out;
            cnt = cnt + 1;
        end
        else if(cnt == 3)
        begin
            in1 = dataIn1 >> 5;
            in2 = key1;
            third = out;
            cnt = cnt + 1;
        end
        else if(cnt == 4)
        begin
            tsum = first ^ second ^ third;
            cnt = cnt + 1;
        end
        else if(cnt == 5)
        begin 
            in1 = tsum;
            in2 = dataIn0;
            dataOut0 = out;
            cnt = cnt + 1;
        end
        else if(cnt == 6)
        begin
            in1 = dataOut0 << 4;
            in2 = key2;
            first = out;
            cnt = cnt + 1;
        end
        else if(cnt == 7)
        begin
            in1 = dataOut0; 
            in2 = sumOut;
            second = out;
            cnt = cnt + 1;
        end
        else if(cnt == 8)
        begin
            in1 = dataOut0 >> 5;
            in2 = key3;
            third = out;
            cnt = cnt + 1;
        end
        else if(cnt == 9)
        begin
            tsum = first ^ second ^ third;
            cnt = cnt + 1;
        end
        else if(cnt == 10)
        begin 
            in1 = tsum;
            in2 = dataIn1;
            dataOut1 = out;
            cnt = cnt + 1;
        end
        else if(cnt == 11)
        begin
            finish = 1;
        end
    end
end
endmodule
`包括“adder.v”
模块processData(dataOut0、dataOut1、dataIn0、dataIn1、key0、key1、key2、key3、sumIn、sumOut、delta、clk、rst、finish);
输出寄存器[1:32]dataOut0,dataOut1,sumOut;
输出寄存器完成;
输入[1:32]数据in0,数据in1,键0,键1,键2,键3,sumIn,delta;
输入时钟,rst;
reg[1:32]in1,in2,first,second,third,tsum;
将[1:32]线接出;
整型碳纳米管;
加法器加法(out,in1,in2);
始终@(posedge clk或negedge rst)
开始
如果(!rst)
开始
cnt=0;
完成=0;
//sumOut=0;
结束
其他的
开始
如果(cnt==0)
开始
in1=苏敏;
in2=δ;
sumOut=out;
cnt=cnt+1;
结束
else if(cnt==1)
开始
in1=数据in1>5;
in2=键1;
第三名=出局;
cnt=cnt+1;
结束
else if(cnt==4)
开始
tsum=第一个^second^第三个;
cnt=cnt+1;
结束
否则如果(cnt==5)
开始
in1=tsum;
in2=dataIn0;
dataOut0=输出;
cnt=cnt+1;
结束
否则如果(cnt==6)
开始
in1=dataOut0>5;
in2=键3;
第三名=出局;
cnt=cnt+1;
结束
否则如果(cnt==9)
开始
tsum=第一个^second^第三个;
cnt=cnt+1;
结束
否则如果(cnt==10)
开始
in1=tsum;
in2=数据in1;
数据输出1=输出;
cnt=cnt+1;
结束
否则如果(cnt==11)
开始
完成=1;
结束
结束
结束
端模

只是想指出,在重置语句中,sumOut=0已被注释掉,因此它不会重置寄存器。另一个if-else可能会工作,因为默认情况下执行了else。因为在上面的代码中只有else if,没有else,所以不管设置了什么

只是想指出,在重置语句中,sumOut=0已被注释掉,因此它不会重置寄存器。另一个if-else可能会工作,因为默认情况下执行了else。因为在上面的代码中只有else if,没有else,所以不管设置了什么

我通过以下更改解决了我的问题。似乎直到下一次时钟触发后,任务才开始

if(cnt == 0)
begin
    in1 <= sumIn; 
    in2 <= delta;
    cnt <= cnt + 1;
end
else if(cnt == 1)
begin
    sumOut <= out;
    cnt <= cnt + 1;
end
if(cnt==0)
开始

在1中,我通过做以下更改解决了我的问题。似乎直到下一次时钟触发后,任务才开始

if(cnt == 0)
begin
    in1 <= sumIn; 
    in2 <= delta;
    cnt <= cnt + 1;
end
else if(cnt == 1)
begin
    sumOut <= out;
    cnt <= cnt + 1;
end
if(cnt==0)
开始

在1中,您是否在每次激活此模块时重置<代码>cnt
仅在
时设置为零!rst
。对于电路来说,这似乎是一种奇怪的工作方式。考虑将<代码> CNT=0<代码>添加到<代码> CNT==11 情况。或者其他一些将设置为
cnt=0
的激活信号。
sumOut
是否有其他驱动程序?我忘了你是如何在ModelSim中检查这一点的,比如右键单击,跟踪驱动程序。你应该使用
是的,我每次都会在上面的模块中重置它,设置
cnt=0
将使模拟永远在循环中运行@Hida@Zana:如果您正在使用ModelSim进行调试,并且您正在跳过
sumOut=out
,并且
out
具有有效值,并且
sumOut
获取值
x
,则您可以99%保证
sumOut
具有另一个驱动程序。如果你没有做这些事情,那么你需要澄清你的问题。您是否实际使用modelsim检查您的驱动程序?关于Russell的评论:必须修复代码才能使用非阻塞分配,但这不是问题的原因。使用阻塞分配将导致竞赛条件,您将遇到另一个问题。您是否在每次激活此模块时重置<代码>cnt
仅在
时设置为零!rst
。对于电路来说,这似乎是一种奇怪的工作方式。考虑将<代码> CNT=0<代码>添加到<代码> CNT==11 情况。或者其他一些将设置为
cnt=0
的激活信号。
sumOut
是否有其他驱动程序?我忘了你是如何在ModelSim中检查这一点的,比如右键单击,跟踪驱动程序。你应该使用
是的,我每次都会在上面的模块中重置它,设置
cnt=0
将使模拟永远在循环中运行@Hida@Zana:如果您正在使用ModelSim进行调试,并且您正在跳过
sumOut=out
,并且
out
具有有效值,并且
sumOut
获取值
x
,则您可以99%保证
sumOut
具有另一个驱动程序。如果你没有做这些事情,那么你需要澄清你的问题。您是否实际使用modelsim检查您的驱动程序?关于Russell的评论:必须修复代码才能使用非阻塞分配,但这不是问题的原因。使用阻塞分配会导致比赛条件,你会有另一个问题。是的,这是真的@德比,没错@DBB