我在quartus中用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有谁知道解决这个问题的方法吗?
发布于 2014-08-01 07:36:53
虽然很难确切地说出您在说什么,但您似乎很好奇,为什么更改初始块中的起始值似乎对计数器的起始位置没有影响。
作为测试平台的一部分,您可能正在执行重置,因此当您查看address时,该值总是从0开始(因为always块中的重置更改了初始块设置)。
发布于 2015-03-12 06:18:37
这部分对我来说是可疑的:
if(reset)
begin
address <= 5'b0;
end应该是:
if(reset)
begin
address <= 5'b00000;
end您可以尝试将此实现与load和start signal一起使用:
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;
endmodulehttps://stackoverflow.com/questions/24714137
复制相似问题