Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
Verilog 此代码上的意外行为,发生了什么? 模块myModule(时钟,A); 输入时钟; 输出寄存器[3:0]A=4'b0000; reg Sin=0; 始终@(posedge CLK) 开始 //Sin_Verilog - Fatal编程技术网

Verilog 此代码上的意外行为,发生了什么? 模块myModule(时钟,A); 输入时钟; 输出寄存器[3:0]A=4'b0000; reg Sin=0; 始终@(posedge CLK) 开始 //Sin

Verilog 此代码上的意外行为,发生了什么? 模块myModule(时钟,A); 输入时钟; 输出寄存器[3:0]A=4'b0000; reg Sin=0; 始终@(posedge CLK) 开始 //Sin,verilog,Verilog,它们不同,因为Sin是该表达式的注册版本(延迟一个周期) 您可以对Sin使用连续赋值来获得相同的行为: module myModule (CLK, A); input CLK; output reg [3:0] A = 4'b0000; reg Sin = 0; always @(posedge CLK) begin Sin <= ((~A[2]&~A[1]&~A[0])|(A[2]&A[1])); A[0] <= A[1]; A[1] <=

它们不同,因为Sin是该表达式的注册版本(延迟一个周期)

您可以对
Sin
使用连续赋值来获得相同的行为:

module myModule (CLK, A);

input CLK;
output reg [3:0] A = 4'b0000;


reg Sin = 0;

always @(posedge CLK)
begin

Sin <= ((~A[2]&~A[1]&~A[0])|(A[2]&A[1]));
A[0] <= A[1];
A[1] <= A[2];
A[2] <= A[3];
A[3] <= Sin;

//A <= {(~A[2]&~A[1]&~A[0])|(A[2]&A[1]), A[3], A[2], A[1]};

end


endmodule
模块myModule(时钟,A);
输入时钟;
输出寄存器[3:0]A=4'b0000;
导线Sin=(~A[2]&~A[1]&~A[0])|(A[2]&A[1]);
始终@(posedge CLK)
开始

A您的案例中有一个小差异,这使得两个部分的行为不同。
Sin中的非阻塞分配
module myModule (CLK, A);

input CLK;
output reg [3:0] A = 4'b0000;


reg Sin = 0;

always @(posedge CLK)
begin

Sin <= ((~A[2]&~A[1]&~A[0])|(A[2]&A[1]));
A[0] <= A[1];
A[1] <= A[2];
A[2] <= A[3];
A[3] <= Sin;

//A <= {(~A[2]&~A[1]&~A[0])|(A[2]&A[1]), A[3], A[2], A[1]};

end


endmodule
module myModule (CLK, A);

input CLK;
output reg [3:0] A = 4'b0000;

wire Sin = (~A[2]&~A[1]&~A[0])|(A[2]&A[1]);

always @(posedge CLK)
begin
    A <= { Sin, A[3], A[2], A[1] };
end

endmodule
Sin = ((~A[2]&~A[1]&~A[0])|(A[2]&A[1]));