Altera Quartus和modelsim

时间:2014-07-12 14:54:37

标签: processor modelsim intel-fpga

我正在用夸克斯的verilog写一些东西,在我看来有些奇怪,但实际上非常简单

此代码正确递增地址

    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以外的其他东西时就会发生这种情况

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

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

2 个答案:

答案 0 :(得分:0)

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

看起来您可能正在执行重置作为测试平台的一部分,所以当您查看address时,该值始终从0开始(因为初始块设置由always块中的重置更改)

答案 1 :(得分:0)

这部分对我很怀疑:

if(reset)
begin
    address <= 5'b0;
end

应该是:

if(reset)
begin
    address <= 5'b00000;
end

您可以尝试将此实现与加载和启动信号一起使用:

 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