通过Verilog计数器

通过Verilog计数器,verilog,Verilog,我正在Verilog中开发一个计数器,它可以循环使用以下系列: 0, 1, 3, 7, 6, 4, 0, 1, ... 并在reset\u b上重置为0 这是到目前为止我的代码,它似乎没有在循环中通过3: module Counter_1(output reg [2: 0] Count, input clock, reset); reg [2: 0] last; always @(posedge clock, negedge reset) begin if

我正在Verilog中开发一个计数器,它可以循环使用以下系列:

0, 1, 3, 7, 6, 4, 0, 1, ...
并在
reset\u b
上重置为
0

这是到目前为止我的代码,它似乎没有在循环中通过
3

module Counter_1(output reg [2: 0] Count, input clock, reset);

    reg [2: 0] last;

    always @(posedge clock, negedge reset) begin

        if (!reset) begin
            Count <= 3'b000;
        end

        else begin

            case (last)
                3'b000: Count <= 3'b001;
                3'b001: Count <= 3'b011;
                3'b011: Count <= 3'b111;
                3'b111: Count <= 3'b110;
                3'b110: Count <= 3'b100;
                3'b100: Count <= 3'b000;
            endcase

        end

        last <= Count;

    end

endmodule
模块计数器_1(输出寄存器[2:0]计数,输入时钟,复位);
reg[2:0]最后一次;
始终@(posedge时钟、negedge重置)开始
如果(!重置)开始

计数您当然应该在重置块中指定最后一个:

    if (!reset) begin
        last <= 3'b000;
        Count <= 3'b000;
    end

您当然应该在重置块中指定最后一个:

    if (!reset) begin
        last <= 3'b000;
        Count <= 3'b000;
    end

查看序列总是很有用的:

000
001
011
111
110
100
分析模式,您会发现序列可以通过以下方式进行:

if (!reset) 
   Count <= 3'b000;
else
   Count <= {Count[1:0],~Count[3]};
如果(!重置)

计数查看序列总是很有用的:

000
001
011
111
110
100
分析模式,您会发现序列可以通过以下方式进行:

if (!reset) 
   Count <= 3'b000;
else
   Count <= {Count[1:0],~Count[3]};
如果(!重置)

计数始终条件下的重置是异步重置。您建议的代码提供了同步重置。始终条件下的重置是异步重置。您建议的代码提供了同步重置。