首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有外部控制变量的verilog

有外部控制变量的verilog
EN

Stack Overflow用户
提问于 2021-06-11 09:34:52
回答 2查看 146关注 0票数 0

模块计数(clk,rst,cnt);希望滚动verilog代码,其计数最多可达7,然后下降到0,并永久重复如下所示。0,1,2,3,4,5,6,7,6,5,4,4,3,2,1

端模

区块报价

EN

回答 2

Stack Overflow用户

发布于 2021-06-13 15:06:43

在倒数时重复状态4两次:

代码语言:javascript
运行
复制
module count(
    input clk, 
    input rst, 
    output cnt
);

    reg [2:0] counter;
    assign cnt = counter;

    // Count up if flag is 1'b0, count down if flag is 1'b1
    wire flag;
    assign flag = (counter == 3'b1) ? 1'b1 : (counter == 3'b0) ? 1'b0;

    // Repeat counter once if special_flag is 2'b01
    reg [1:0] special_flag;

    always @(posedge clk)
    begin
        if (flag == 1'b0)
        begin
            counter = counter + 1;
        end
        else if (counter == 3'b100 && special_flag == 2'b01)
        begin
            // Do not decrease counter, reset special_flag back to 2'b0
            special_flag = 2'b0;
        end else
        begin
            counter = counter - 1;
        end

        // Set special_flag to be 2'b01 when counter is 3'b1
        if (counter == 3'b1)
        begin
            special_flag = 2'b01;
        end
    end

endmodule
票数 1
EN

Stack Overflow用户

发布于 2021-06-12 09:21:20

代码语言:javascript
运行
复制
module count(
    input clk, 
    input rst, 
    output cnt
);

    reg [2:0] counter;
    assign cnt = counter;

    // Count up if flag is 1'b0, count down if flag is 1'b1
    wire flag;
    assign flag = (counter == 3'b1) ? 1'b1 : (counter == 3'b0) ? 1'b0;

    always @(posedge clk)
    begin
        if (flag == 1'b0)
        begin
            counter = counter + 1;
        end
        if (flag == 1'b1)
        begin
            counter = counter - 1;
        end
    end

endmodule
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67934596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档