将此原理图转换为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

下面是完整的代码。 我只想在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,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
vs
a='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