FPGA-基于chipscope的超声波测距调试

网友投稿 582 2022-11-16

FPGA-基于chipscope的超声波测距调试

FPGA-基于chipscope的超声波测距调试

调整chipscope数据顺序:(引荐博文)

引言

索性再破例一下,成个系列也行。

内容组织

1.建立工程  2.插入及配置核  2.1运行Synthesize  2.2新建cdc文件  2.3 ILA核的配置  3. Implement and generate programming file  4.利用Analyzer观察信号波形  4.1连接器件  4.2-配置fpga  4.3载入信号端口名  4.4设置触发信号  4.5运行并观察信号波形  补充

1. 建立工程 ChipScope是配合Xilinx Ise使用的片内逻辑分析工具,使用的第一步是建立ise工程文件,详细步骤可参考ise使用说明。如果已有建好的ise工程,可跳过此步骤,打开已有工程即可。 建立工程时注意正确添加.v源文件和.ucf管脚配置文件。

2. 插入及配置核         这里介绍的是ICON核和ILA核的使用方法。ILA核提供触发和跟踪功能,根据用户设置的触发条件捕获数据;然后在ICON的控制下,通过边界扫描口将数据上传到PC;最后在Analyzer中显示出信号波形。

2.1 运行Ise的Synthesize

2.2 新建cdc文件

弹出netlist changed的提示框,点选ok刷新网表。通过number of input trigger ports可设置要观察波形的组数,通过trigger width可设置每组观察的信号的数目。

双击clock ports打开select net对话框。首先连接时钟信号,在右边net selections框中点clock signals,选择时钟的信道CH0,在左下方的信号列表中找到时钟信号,单击选中,然后单击右下方make connections按钮,完成clk信号的连接。

3. Implement和Generate Programming File

单击选中sources框中顶层源文件,运行processes框中的Implement。注意,如果Implement过程中报错端口连接不完全,应返回ILA配置检查端口是否全部连接。

运行Generate Programming File,生成.bit文件。

4. 利用Analyzer观察信号波形

运行process框中的analyze design using chipscope,进入chipscope pro analyzer。

4.1 连接器件

单击左上角file下面的图标,连接到器件,弹出对话框选ok。

4.2 -配置fpga

4.4 设置触发信号

双击trigger setup打开触发信号设置框,在value栏中可设置开始信号采集的触发信号值,其中每一位对应一个端口,按照端口顺序排列。例如图中设置为端口0(cle)为1,并且端口7(clk)为0时开始采集信号。X表示任意值。

4.5 运行并观察波形

单击左上角三角形按钮启动fpga电路,当各端口信号满足设置的触发信号时,程序开始采集信号,并在waveform中显示采集到的信号。可通过左上角的一系列​​控制按钮​​调节波形显示。

补充: 1、 当对源文件进行过修改后需重新运行Synthesize、Implement、Generate programming file,生成.bit文件,并在chipscope analyzer中通过configure重新加载.bit文件。

超声波时序图

以上时序图表明你只需要提供一个 10uS 以上脉冲触发信号,该模块内部将发出 8 个 40kHz 周期电平并检测回波。一旦检测到有回波信号则输出回响信号 。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式:uS/58=厘米或者 uS/148=英寸;或是:

距离=高电平时间*声速(346M/S)(室温下)/2;建议测量周期为 60ms 以上,以防止发射信号对回响信号的影响。 注 :

1 、 此模块不宜带电连接 , 若要带电连接 , 则先让模块的  GND  端先连接 , 否则会影响 模块的正常工作。

2 、测距时,被测物体的面积不少于  5 0.5  平方米且平面尽量要求平整,否则影响测量的 结果

TOP.V:

module top(ext_clk_25m,ext_rst_n,ultrasound_trig,ultrasound_echo,led ); input ext_clk_25m; input ext_rst_n; input ultrasound_echo; output ultrasound_trig; output led; wire clk_12m5; wire clk_25m; wire clk_50m; wire clk_100m; wire sys_rst_n; pll uut_pll (// Clock in ports .CLK_IN1(ext_clk_25m), // IN // Clock out ports .CLK_OUT1(clk_12m5), // OUT .CLK_OUT2(clk_25m), // OUT .CLK_OUT3(clk_50m), // OUT .CLK_OUT4(clk_100m), // OUT // Status and control signals .RESET(~ext_rst_n),// IN .LOCKED(sys_rst_n)); // OUT wire clk_100khz_en; clk_100khz_en uut_clk_100khz_en( .clk(clk_25m), .rst_n(sys_rst_n), .clk_100khz_en(clk_100khz_en) ); sound uut_sound( .clk(clk_25m), .rst_n(sys_rst_n), .clk_100khz_en(clk_100khz_en), .ultrasound_trig(ultrasound_trig), .ultrasound_echo(ultrasound_echo) ); wire ultrasound_echo_r; IBUF #( .IOSTANDARD("DEFAULT") ) IBUF_inst( .O(ultrasound_echo_r), .I(ultrasound_echo) ); assign led =ultrasound_echo;endmodule

这里不写IBUF这个不能通过chipscope检测到

clk_100khz_en.v:

module clk_100khz_en(clk,rst_n,clk_100khz_en ); input clk; input rst_n; output clk_100khz_en; reg [7:0] cnt; always@(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin cnt<=1'b0; end else if(cnt==8'd249)begin cnt<=1'b0; end else begin cnt<=cnt+1'b1; end end assign clk_100khz_en=(cnt==8'd249);endmodule

sound.v:

module sound(clk,rst_n,clk_100khz_en,ultrasound_trig,ultrasound_echo ); input clk; input rst_n; input clk_100khz_en; input ultrasound_echo;//回响信号 output ultrasound_trig;//脉冲激励信号 reg [16:0]timer_cnt; always@(posedge clk or negedge rst_n)begin if(rst_n==1'b0)begin timer_cnt<=1'b0; end else if(clk_100khz_en==1'b1)begin if(timer_cnt<17'd99_999)begin timer_cnt<=timer_cnt+1'b1; end else begin timer_cnt<=1'b0; end end else begin timer_cnt<=timer_cnt; end end assign ultrasound_trig=(timer_cnt==1'b1)?1'b1:1'b0;//每隔一秒产生一次脉冲 endmodule

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小程序 可拖拽的视图容器movable-view
下一篇:微信小程序的view容器简单记录笔记
相关文章

 发表评论

暂时没有评论,来抢沙发吧~