仿真无输出 到底程序哪有问题?????求解答
module pulse_counter_task_logic(divide_clk,
reset_n,
pulse_pos_input,
pulse_neg_input,
pulse_result,
pre_pulse_pos_1,
pre_pulse_neg_1,
);
//Inputs
input divide_clk; //Input Clock to be divided
input reset_n; //Reset
input pulse_pos_input; //input pulse positive
input pulse_neg_input; //input pulse negative
output pulse_result; // output pulse counter
//output irq;
output pre_pulse_neg_1;
output pre_pulse_pos_1;
//output a;
//Signal Declarations
//reg counter_ten;
//reg counter; //Internal Counter
reg pulse_result_r; //output pulse counter register
reg pre_pulse_pos; //pulse counter temporary register
reg pre_pulse_neg;
//计算两输入脉冲pulse_pos_input与pulse_neg_input的和值
always @( posedgedivide_clk ornegedge reset_n)
begin
if (~reset_n)
pulse_result_r <= 8'h0;
else if(divide_clk)
begin
//b<= pre_pulse_pos ;
pulse_result_r <= pre_pulse_pos + pre_pulse_neg;
end
else
pulse_result_r <=pulse_result_r ;
end
// pulse measure process
//计算每次在divide_clk=0时的pulse_pos_input 的输入脉冲数
always @(negedge pulse_pos_input or posedge divide_clk or negedge reset_n)
begin
if((~reset_n) | divide_clk )
begin //复位 清零
#8 pre_pulse_pos <= 8'h0; //clear the pre_pulse
end
else
begin
pre_pulse_pos <= pre_pulse_pos + 8'h1;
end
end
//计算每次在divide_clk=0时的pulse_neg_input 的输入脉冲数
always @(negedge pulse_neg_input or posedge divide_clk or negedge reset_n)
begin
if((~reset_n) | divide_clk )//复位 清零
begin
pre_pulse_neg <= 8'h0; //clear the pre_pulse
end
else
begin
pre_pulse_neg <= pre_pulse_neg - 8'h1; //此处加减不重要
end
end
assign pulse_result = pulse_result_r;
//assign irq = divide_clk;
assign pre_pulse_pos_1 = pre_pulse_pos;
assign pre_pulse_neg_1 = pre_pulse_neg;
endmodule
程序好像没有什么问题用quartusII自带的仿真器仿真出来的 pulse_result为什么无输出请教高手?
注:后两个模块调试过 没有问题,
图中:neg_input和pos_input 表示程序中的两输入pulse_neg_input 和 pulse_pos_input
result即为pulse_result 始终输出???? 程序写得。。。。有问题 程序不用加 divide_clk的上升沿,输出没有结果,是上升沿计数和下降沿计数相等吧
always @(negedge pulse_pos_input ornegedge reset_n)
begin
if((~reset_n) | divide_clk )
begin //复位 清零
#8 pre_pulse_pos <= 8'h0; //clear the pre_pulse
end
else
begin
pre_pulse_pos <= pre_pulse_pos + 8'h1;
end
end
//计算每次在divide_clk=0时的pulse_neg_input 的输入脉冲数
always @(negedge pulse_neg_input or negedge reset_n)
begin
if((~reset_n) | divide_clk )//复位 清零
begin
pre_pulse_neg <= 8'h0; //clear the pre_pulse
end
else
begin
pre_pulse_neg <= pre_pulse_neg - 8'h1; //此处加减不重要
end
end 回复 4# 风中的承诺
if((~reset_n) | divide_clk )//复位 清零
begin
pre_pulse_neg <= 8'h0;
divide有控制作用,必须列为敏感信号的 那是组合电路,时序电路不用 你程序表达的意思是在 divide—clk为上跳沿时neg和pos清零 并且把neg和pos相加赋给result。
由于你在neg和pos赋值的always块中第4行写到将neg和pos置零,而result赋值的always块内在第5句将result赋值 所以result被赋值要慢于neg和pos被清零 所以result一直为零。
还有一个要注意 你的仿真#8没起作用,我希望你能告诉我为什么 回复 7# jahero
恩以为#8能起作用可还是不行要不要无所谓。当posedge divide_clk 到来时,几个快同时执行,无阻塞赋值语句产生寄存器,为什么会出现
‘’由于你在neg和pos赋值的always块中第4行写到将neg和pos置零,而result赋值的always块内在第5句将result赋值 所以result被赋值要慢于neg和pos被清零 所以result一直为零。‘’ 这种情况呢?
如果是这样,该如何改动呢?
请回复 你这个产生的是d触发器 如果你非要devide——clk既控制清零又控制相加的话 你只能改用状态机了 第一状态两数相加 第二状态清零 最好清零和赋值的时钟分开 实用时一般不会被逼到非这么写不可 回复 9# jahero
能不能在以上程序中有小的改动就能实现的?
页:
[1]
2