Verilog 如何根据状态图对3位二进制计数器模块进行编码?

Verilog 如何根据状态图对3位二进制计数器模块进行编码?,verilog,circuit,Verilog,Circuit,我想基于这个状态图构建一个模块。下面的代码是我编写的模块和测试台。当您构建这个模块时, 你可以面对这个错误 ./3bit\u c\u sdiagram.v:1:语法错误 我放弃了 如何解决此语法错误?和 如果我的代码与解决方案相去甚远,我该如何编写它 3bit\u c\u sdiagram.v module simulate; wire t_y_out; reg t_reset; reg t_clock; 3bit_c_sdiagram M1(t_y_out, t_clock, t_reset

我想基于这个状态图构建一个模块。下面的代码是我编写的模块和测试台。当您构建这个模块时, 你可以面对这个错误

./3bit\u c\u sdiagram.v:1:语法错误 我放弃了

如何解决此语法错误?和 如果我的代码与解决方案相去甚远,我该如何编写它

3bit\u c\u sdiagram.v

module simulate;
wire t_y_out;
reg t_reset;
reg t_clock;

3bit_c_sdiagram M1(t_y_out, t_clock, t_reset);

initial #200 $finish; 
initial begin

$dumpfile("test.vcd");
$dumpvars(0,simulate);

   t_reset = 0;
   t_clock = 0;
   #5 t_reset = 1;

 repeat(16)
   #5 t_clock = ~t_clock;
end
endmodule

3bit_c_sdiagram
是Verilog中的非法标识符(即名称)。Verilog名称可以包含字母、数字、美元符号或下划线,但必须以字母或下划线开头

如另一个解决方案中所述,模块名称不能以数字开头

我添加这个答案只是为了在您的示例中概述一件事(即使它不是您问题的答案)。在代码中,您有:

always @ (posedge clock, negedge reset)
 if(reset == 0) state <= S0;    //Initialize to state S0
 else case(state)
  S0:   if(clock) state <= S1; else state <= S0;

else状态+1因为您做了一个测试台,所以时钟部分中的所有分配都是非阻塞的,并且您有一个重置。我见过比这更糟糕的设计我怎么能编码它?加祖亚。+1表示我对你的问题投了赞成票。这是对做好工作的补充。把你的模块名整理一下,我想一切都会好的。
always @ (posedge clock, negedge reset)
 if(reset == 0) state <= S0;    //Initialize to state S0
 else case(state)
  S0:   if(clock) state <= S1; else state <= S0;
always @ (posedge clock, negedge reset)
 if(reset == 0) state <= S0;    //Initialize to state S0
 else case(state)
  S0:   state <= S1; else state <= S0;
...