首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Altera Quartus和modelsim

Altera Quartus和modelsim
EN

Stack Overflow用户
提问于 2014-07-12 22:54:37
回答 2查看 119关注 0票数 0

我在quartus中用verilog写了一些东西,出现了一些奇怪的东西,但实际上很简单

此代码正确地递增地址

代码语言:javascript
复制
    module counter(
    input wire clock,
    input wire reset,
    output reg [4:0]address
);

initial
begin
    address = 5'b0
end

always@(posedge clock)
begin
    if(reset)
    begin
        address <= 5'b0;
    end
    else
    begin
        address <= address + 5'b00001;
    end
end

endmodule

这,改变的位变得无关紧要,当我开始输出非0的值时,就会发生这种情况

代码语言:javascript
复制
module counter(
    input wire clock,
    input wire reset,
    output reg [4:0]address
);

initial
begin
    address = 5'b11101;
end

always@(posedge clock)
begin
    if(reset)
    begin
        address <= 5'b0;
    end
    else
    begin
        address <= address + 5'b00001;
    end
end

endmodule

有谁知道解决这个问题的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2014-08-01 07:36:53

虽然很难确切地说出您在说什么,但您似乎很好奇,为什么更改初始块中的起始值似乎对计数器的起始位置没有影响。

作为测试平台的一部分,您可能正在执行重置,因此当您查看address时,该值总是从0开始(因为always块中的重置更改了初始块设置)。

票数 0
EN

Stack Overflow用户

发布于 2015-03-12 06:18:37

这部分对我来说是可疑的:

代码语言:javascript
复制
if(reset)
begin
    address <= 5'b0;
end

应该是:

代码语言:javascript
复制
if(reset)
begin
    address <= 5'b00000;
end

您可以尝试将此实现与load和start signal一起使用:

代码语言:javascript
复制
 module Counter(load,clk,start,data_in,data_out);
    input load;
    input clk;
    input start;
    input [5-1:0] data_in;
    output [5-1:0] data_out;
    reg [5-1:0] tmp;
    initial
    begin
        tmp = 5'b0000;
    end
    always @ ( posedge clk)
        begin
        if(~start)
        begin
            tmp <= 5'b0000;
        end
        else if(load)
            tmp <= data_in;
        else
            tmp <= tmp + 1'b1;
    end
    assign data_out = tmp;
endmodule
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24714137

复制
相关文章

相似问题

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