`timescale 1ns/1ns module seq_circuit( input C , input clk , input rst_n, output wire Y ); reg [1:0]cur_state; reg [1:0]nex_state; always@(posedge clk or negedge rst_n)begin if(!rst_n)begin cur_state<=0; nex_state<=0; end else begin cur_state<=nex_state; end end always@(*)begin case(cur_state) 2'b00:nex_state=(C==1)?2'b01:2'b00; 2'b01:nex_state=(C==1)?2'b01:2'b11; 2'b10:nex_state=(C==1)?2'b10:2'b00; 2'b11:nex_state=(C==1)?2'b10:2'b11; endcase end assign Y=((cur_state==2'b11)|((cur_state==2'b10)&&(C==1)))?1:0; endmodule
从这题来看,并不需要在设置一个y_reg存储,应该是因为直接用了assign,而没有用always块,所以可以直接使用,如果设置了反而会报错,如下:
|reg Y_reg; cannot be driven by primitives or continuous assignment.