将此原理图转换为verilog代码,编译失败
下面是完整的代码。 我只想在Verilog代码中实现下面的原理图。如果我能在一个始终块中写组合逻辑和顺序逻辑,我会有点困惑。 其次,敏感列表需要记录脉冲和输入变化。这是一个手工解决的解决方案,但现在我想把它放到Verilog中,在Verilog中实现它,并查看输出将此原理图转换为verilog代码,编译失败,verilog,sequential,Verilog,Sequential,下面是完整的代码。 我只想在Verilog代码中实现下面的原理图。如果我能在一个始终块中写组合逻辑和顺序逻辑,我会有点困惑。 其次,敏感列表需要记录脉冲和输入变化。这是一个手工解决的解决方案,但现在我想把它放到Verilog中,在Verilog中实现它,并查看输出 module Q4a( input x, input clock, output z ); reg z; reg y1,y2; reg d1,d2; //wire x; //wire clock; always @(x,y1,y
module Q4a(
input x,
input clock,
output z
);
reg z;
reg y1,y2;
reg d1,d2;
//wire x;
//wire clock;
always @(x,y1,y2)
begin
d1=(~x)&y2;
d2=x;
z=x&y1;
end
always @(clock)
begin
//y1<=(~x)&y2;
//y2<=x;
//z<=x&y1;
y1<=d1;
y2<=d2;
end
endmodule
模块Q4a(
输入x,
输入时钟,
输出z
);
reg z;
条例y1、y2;
条例d1、d2;
//导线x;
//线钟;
始终@(x,y1,y2)
开始
d1=(~x)和y2;
d2=x;
z=x&y1;
结束
始终@(时钟)
开始
//y1x和z在Verilog中有特殊的含义,最好对变量名使用其他名称
module Q4a(
input x,
input clock,
output reg z //Just declare as reg here
);
reg y1,y2;
reg d1,d2;
// Use automatic sensitivity list
always @* begin
d1=(~x)&y2;
d2=x;
z=x&y1;
end
//Filp-flops use `posedge` to make edge sensitive
always @(posedge clock) begin
y1<=d1;
y2<=d2;
end
endmodule
模块Q4a(
输入x,
输入时钟,
output reg z//只需在此处声明为reg
);
条例y1、y2;
条例d1、d2;
//使用自动敏感度列表
总是开始
d1=(~x)和y2;
d2=x;
z=x&y1;
结束
//Filp触发器使用'posedge'使边缘敏感
始终@(posedge时钟)开始
y1无需使用始终开始。。。结束
始终可以使用直接赋值语句编写组合电路
见以下代码:
module Q4a (
input wire x,
input wire clock,
input wire rst_n,
output wire z
);
wire d1;
reg y1;
reg y2;
assign d1 = ~x & y2;
assign z = x & y1;
always @ (posedge clock or negedge rst_n)
begin
if(rst_n) begin
y1 <= 1'b0;
y2 <= 1'b0;
end else begin
y1 <= d1;
y2 <= x; // x is d2 too.
end
end
endmodule
模块Q4a(
输入线x,
输入线时钟,
输入线rst\n,
输出线z
);
导线d1;
条例y1;
条例y2;
分配d1=~x&y2;
指定z=x&y1;
始终@(posedge时钟或negedge重新设置)
开始
如果(重新)开始
y1是否有必要不使用z和x,或者这是您的建议(推荐)?@Morgan。非常感谢。在Xilinx ISE工具版本14.2(64位版本)中,两者合成为相同的原理图。我将在原始帖子上更新生成的原理图。@PrakashDarji您可以使用x和z作为变量名,但我发现这非常令人困惑,即a=x
vsa='x
现在的含义非常不同。
module Q4a (
input wire x,
input wire clock,
input wire rst_n,
output wire z
);
wire d1;
reg y1;
reg y2;
assign d1 = ~x & y2;
assign z = x & y1;
always @ (posedge clock or negedge rst_n)
begin
if(rst_n) begin
y1 <= 1'b0;
y2 <= 1'b0;
end else begin
y1 <= d1;
y2 <= x; // x is d2 too.
end
end
endmodule
assign z = x & y1;
always @ (posedge clock or negedge rst_n)
begin
if(rst_n) begin
y1 <= 1'b0;
y2 <= 1'b0;
end else begin
y1 <= ~x & y2;
y2 <= x; // x is d2 too.
end
end