//普通for循环: integer i; always @(vote) begin sum = 3'b000; for(i = 0; i <7; i = i + 1) begin if(vote[i]) sum = sum + 1; end if(sum >= 3'd4) pass = 1'b1; else pass = 1'b0; end //生成for循环: genvar i;//只能用genvar作为循环变量 generate for (i=1;i<99;i=i+1) begin: add_loop//这个名字是必须的 mod_name instance_name(......);//括号里写由i推出的信号 end endgenerate
//第一段: always @(*) begin//一个组合逻辑always块,用于写状态转换逻辑,当in改变时,next_state将立即改变。 case(state) A: next_state = f(in)//关于in的函数 B: next_state = f(in) ... endcase end //第二段(异步): always @(posedge clk, posedge areset) begin if(areset == 1) begin state <= 0;//reset end else state <= next_state; end //第二段(同步): always @(posedge clk) begin if(reset == 1) begin state <= 0;//reset end else state <= next_state; end //第三段(assign法) assign out = (state == ...);//判断state //第三段(组合逻辑always块法) always@(*) begin case (state) A: {out3,out2,out1} = 3'b111; B: {out3,out2,out1} = 3'b110;//对每一种状态输出 ... endcase end
Mealy型
仅仅第三段发生了改变,可使用{state,in}来做输出判断。
1 2 3 4 5 6 7 8 9
//第三段(assign法) assign out = f(state,in);//关于state和in的函数 //第三段(组合逻辑always块法) always@(*) begin case ({state,in}) 4'b0000: {out3,out2,out1} = 3'b111; 4'b0001: {out3,out2,out1} = 3'b110;//对每一种state与in做输出 ... end