中级会员
- 积分
- 252
- 金钱
- 252
- 注册时间
- 2012-8-21
- 在线时间
- 29 小时
|
楼主 |
发表于 2014-7-21 16:04:33
|
显示全部楼层
附上主要的verilog代码:
其中input1_qnt_fst和input1_wid_fst是从stm32输入fpga的脉冲个数和脉冲宽度,
reg1_wid_fst和reg1_qnt_fst是fpga内部定义的寄存器,用来累加用
always @(posedge clk_div) begin
if(enn == 1) begin
if(reg1_wid_fst < input1_wid_fst) begin
reg1_wid_fst = reg1_wid_fst + 16'b1;
end
else begin
if(reg1_qnt_fst < input1_qnt_fst) begin
reg1_wid_fst = 1;
reg1_qnt_fst = reg1_qnt_fst + 16'b1;
end
else begin
reg1_qnt_fst = input1_qnt_fst;
end
end
end
else if(enn == 0) begin
reg1_wid_fst = 0;
reg1_qnt_fst = 0;
end
end
assign pout1 = reg1_qnt_fst[0];
在fpga内部通过reg1_wid_fst的累加,加到reg1_wid_fst==input1_wid_fst时就把reg1_qnt_fst加1,同时把reg1_wid_fst清零,重新开始累加,直到reg1_qnt_fst==input1_qnt_fst为止,
输出的脉冲是就是取reg1_qnt_fst的最低位进行输出
stm32是通过定时器10ms给fpga发这些参数,同时启动enn信号进行发送。
但是总是会出现1楼的那个问题,求大神指点指点啊 |
|