完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
麻烦大家问个棘手的问题,代码是根据CP输入信号分频,输出PCI1_CLK和PCI2_CLK,已经分频的间隔时间。PCI2_CLK是PCI1_CLK的延时复制。
为什么PCI2_CLK仿真出来和示波器打出来波形都不对。麻烦哪位高手 解救下。 module bmq ( clk,rst_n,bmq20_int,cp,time_dir_20,pci1_clk,pci2_clk ); input clk; //时钟信号,50MHz input rst_n; //复位信号,低电平有效 input cp; //编码器输入 output pci1_clk; //输入采集卡1方波 output [31:0] time_dir_20; //输出间隔20个编码器方波时间 output bmq20_int; // 给串口发送触发 output pci2_clk; //输出采集卡2方波 reg cp_rx0,cp_rx1; //接收数据寄存器,滤波用 wire cp_rx; always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin cp_rx0 <= 1'b0; cp_rx1 <= 1'b0; end else begin cp_rx0 <= cp; cp_rx1 <= cp_rx0; end end assign cp_rx =cp_rx1 ^ cp_rx0; reg out_int; reg out_int1; assign bmq20_int= out_int; reg [4:0] bmq_count; reg [39:0] time_20_inc; reg[31:0] time_dir_20; reg[39:0] time_dir_20_3; reg[39:0] time_dir_20_buf; parameter delay_time= 500000 ; reg pci2_int; reg [3:0] num_delay_2; wire pci2_clk; always @ (posedge cp_rx or negedge rst_n) begin if(!rst_n) begin bmq_count <=5'h0; time_dir_20 <= 32'h0; out_int <=1'h0; out_int1<=1'h0; end else begin if(time_20_inc - time_dir_20_3 > 40'h1dcd6500) begin //这部分代码是为了速度很小很小,编码器间隔时间过长,不发送间隔时间及触发采集 time_dir_20 <= 32'h0; time_dir_20_buf <= 40'h0; time_dir_20_3 <= time_20_inc; bmq_count <=5'h0; end else if(bmq_count==20) begin out_int <=~out_int; out_int1=~out_int1; bmq_count <=5'h1; time_dir_20_3 <= time_20_inc; //时间间隔取32位 time_dir_20_buf <= time_20_inc -time_dir_20_3; time_dir_20 <=time_dir_20_buf[31:0]; end else bmq_count <= bmq_count+1'h1; end end assign pci1_clk=out_int ; always@ (posedge clk or negedge rst_n) begin if(!rst_n) time_20_inc <= 40'h0; else if(bmq_count) time_20_inc <= time_20_inc +1'h1; end ////////////////////////以下代码是PCI2采集卡,是PCI1采集卡触发波形的延时复制 //取了10个寄存器 设计成一个环形队列,每次延时值是固定的,所以延时比较的寄存器都是从队头到队尾 循环比较。 reg out_int2; always@ (posedge clk or negedge rst_n) begin if(!rst_n) out_int2<=1'h0 ; else out_int2<= out_int1; end wire neg_pci2_int1; assign neg_pci2_int1 =out_int2^out_int1; reg[39:0] delay_count_1; reg[39:0] delay_count_2; reg[39:0] delay_count_3; reg[39:0] delay_count_4; reg[39:0] delay_count_5; reg[39:0] delay_count_6; reg[39:0] delay_count_7; reg[39:0] delay_count_8; reg[39:0] delay_count_9; reg[39:0] delay_count_10; reg [3:0] num_delay; always @ (posedge neg_pci2_int1 or negedge rst_n) begin if(!rst_n) begin delay_count_1 <= 40'h0; delay_count_2 <= 40'h0; delay_count_3 <= 40'h0; delay_count_4 <= 40'h0; delay_count_5 <= 40'h0; delay_count_6 <= 40'h0; delay_count_7 <= 40'h0; delay_count_8 <= 40'h0; delay_count_9 <= 40'h0; delay_count_10 <= 40'h0; num_delay <= 4'h0; end else begin case (num_delay) 4'd0: begin delay_count_1 <= time_20_inc; num_delay <=4'h1; end 4'd1: begin delay_count_2 <= time_20_inc; num_delay <=4'h2; end 4'd2: begin delay_count_3 <= time_20_inc; num_delay <=4'h3; end 4'd3: begin delay_count_4 <= time_20_inc; num_delay <=4'h4; end 4'd4: begin delay_count_5 <= time_20_inc; num_delay <=4'h5; end 4'd5: begin delay_count_6 <= time_20_inc; num_delay <=4'h6; end 4'd6: begin delay_count_7 <= time_20_inc; num_delay <=4'h7; end 4'd7: begin delay_count_8 <= time_20_inc; num_delay <=4'h8; end 4'd8: begin delay_count_9 <= time_20_inc; num_delay <=4'h9; end 4'd9: begin delay_count_10 <= time_20_inc; num_delay <=4'h0; end default: num_delay <= 1'h0; endcase end end reg [39:0] time_20_inc_1; always@ (posedge clk or negedge rst_n) begin if(!rst_n) begin num_delay_2 <= 4'h0; pci2_int <=1'h0; time_20_inc_1 <=40'h0; end else begin time_20_inc_1 <=time_20_inc; case (num_delay_2) 4'd0: if (time_20_inc_1 - delay_count_1 == delay_time) begin num_delay_2 <= 4'h1; pci2_int<= ~pci2_int; end else pci2_int<= pci2_int; 4'd1: if (time_20_inc_1 - delay_count_2 ==delay_time ) begin num_delay_2 <= 4'h2; pci2_int<= ~pci2_int; end else pci2_int<= pci2_int; 4'd2: if (time_20_inc_1 -delay_count_3 == delay_time ) begin num_delay_2 <= 4'h3; pci2_int<= ~pci2_int; end else pci2_int<= pci2_int; 4'd3: if (time_20_inc_1 -delay_count_4 == delay_time ) begin num_delay_2 <= 4'h4; pci2_int<= ~pci2_int; end else pci2_int<= pci2_int; 4'd4: if (time_20_inc_1 -delay_count_5==delay_time ) begin num_delay_2 <= 4'h5; pci2_int<= ~pci2_int; end else pci2_int<= pci2_int; 4'd5: if (time_20_inc_1 -delay_count_6 ==delay_time ) begin num_delay_2 <= 4'h6; pci2_int<= ~pci2_int; end else pci2_int<= pci2_int; 4'd6: if (time_20_inc_1 -delay_count_7==delay_time ) begin num_delay_2 <= 4'h7; pci2_int<= ~pci2_int; end else pci2_int<= pci2_int; 4'd7: if (time_20_inc_1 -delay_count_8 == delay_time ) begin num_delay_2 <= 4'h8; pci2_int<= ~pci2_int; end else pci2_int<= pci2_int; 4'd8: if (time_20_inc_1 -delay_count_9 == delay_time )begin num_delay_2 <= 4'h9; pci2_int<= ~pci2_int; end else pci2_int<= pci2_int; 4'd9: if (time_20_inc_1 -delay_count_10 == delay_time ) begin num_delay_2 <= 4'h0; pci2_int<= ~pci2_int; end else pci2_int<= pci2_int; default: pci2_int<= 1'b0; endcase end end assign pci2_clk = pci2_int; endmodule |
|
相关推荐
1个回答
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
130 浏览 0 评论
NVMe高速传输之摆脱XDMA设计54:如何测试队列管理功能2
363 浏览 0 评论
NVMe高速传输之摆脱XDMA设计53:如何测试队列管理功能
390 浏览 0 评论
NVMe高速传输之摆脱XDMA设计52:主要功能测试结果与分析4(NVMe 指令提交与完成机制测试)
933 浏览 0 评论
NVMe高速传输之摆脱XDMA设计51:主要功能测试结果与分析3 nvmePCIe高速存储 PCIe高速存储
571 浏览 0 评论
4559 浏览 64 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-12 04:12 , Processed in 0.494207 second(s), Total 42, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
5196