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

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

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

https://blog.csdn.net/rill_zhen/article/details/8115756

引言


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

内容组织

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管脚配置文件。image.png

image.png

2.2 新建cdc文件


         右键单击sources栏中顶层源文件,点击new source,选择chipscope definition and connection file,设好文件名及文件路径,勾选add to project,然后一直点next完成建立。

image.png

image.png

2.3 核的配置


         双击sources栏中的刚刚建立的cdc文件,启动core inserter。点击两次next,进入ILA的设置界面,首先是trigger parameters界面。

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

image.png

点击next进入capture parameters界面。通过data depth可设置信号采集的时钟周期数,采集数目越多,观察信号的时间越长。

image.png

点击next进入net connections界面。可以看到net connections端口列表显示红色字体,表示端口没有完全连接;当全部端口都与具体信号连接时,字体变为黑色。

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

image.png

在右边net selections框中点trigger/data signals,用同样的方法连接所有想要观察的信号。如果之前设置观察多组信号,可点击右下方TP0/TP1切换信号组。连接完成后点击下方OK退出select net对话框,然后点击return to project navigator退出core inserter,并保存设置。

image.png

3. Implement和Generate Programming File

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

       右键单击Generate Programming File,点击properties,在startup options中将start-up clock设为JTAG clock,点击ok。

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

image.png

4. 利用Analyzer观察信号波形

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

4.1 连接器件


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

image.png

4.2 下载配置fpga


       右键点击my device1(即fpga芯片),单击configure,弹出对话框,点select new file,选择之前生成的.bit文件,点击ok,之后程序将把design下载到fpga。

image.png

4.3 载入信号端口名


       单击file->import,点击select new file选中cdc文件,然后点击ok。此时可以看到端口列表中的端口名称都变成了对应的信号名称。

image.png

4.4 设置触发信号


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

image.png

4.5 运行并观察波形


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

 image.png

补充:

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

image.png

超声波时序图

image.png

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

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

注 :

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

模块的正常工作。

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

结果

image.png

TOP.V:


moduletop(ext_clk_25m,ext_rst_n,ultrasound_trig,ultrasound_echo,led    );
inputext_clk_25m;
inputext_rst_n;
inputultrasound_echo;
outputultrasound_trig;
outputled;
wireclk_12m5;
wireclk_25m;
wireclk_50m;
wireclk_100m;
wiresys_rst_n;
plluut_pll(//Clockinports    .CLK_IN1(ext_clk_25m),      //IN//Clockoutports    .CLK_OUT1(clk_12m5),     //OUT    .CLK_OUT2(clk_25m),     //OUT    .CLK_OUT3(clk_50m),     //OUT    .CLK_OUT4(clk_100m),     //OUT//Statusandcontrolsignals    .RESET(~ext_rst_n),//IN    .LOCKED(sys_rst_n));      //OUTwireclk_100khz_en;
clk_100khz_enuut_clk_100khz_en(
    .clk(clk_25m),
    .rst_n(sys_rst_n),
    .clk_100khz_en(clk_100khz_en)
    );
sounduut_sound(
    .clk(clk_25m),
    .rst_n(sys_rst_n),
    .clk_100khz_en(clk_100khz_en),
    .ultrasound_trig(ultrasound_trig),
    .ultrasound_echo(ultrasound_echo)
    );
wireultrasound_echo_r;
IBUF#(        .IOSTANDARD("DEFAULT")
)IBUF_inst(
        .O(ultrasound_echo_r),
        .I(ultrasound_echo)
    );
assignled=ultrasound_echo;
endmodule

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

clk_100khz_en.v:


moduleclk_100khz_en(clk,rst_n,clk_100khz_en    );
inputclk;
inputrst_n;
outputclk_100khz_en;
reg [7:0] cnt;
always@(posedgeclkornegedgerst_n)beginif(rst_n==1'b0)begincnt<=1'b0;endelseif(cnt==8'd249)begincnt<=1'b0;endelsebegincnt<=cnt+1'b1;endendassignclk_100khz_en=(cnt==8'd249);endmodule

sound.v:


modulesound(clk,rst_n,clk_100khz_en,ultrasound_trig,ultrasound_echo    );
inputclk;
inputrst_n;
inputclk_100khz_en;
inputultrasound_echo;//回响信号outputultrasound_trig;//脉冲激励信号reg [16:0]timer_cnt;
always@(posedgeclkornegedgerst_n)beginif(rst_n==1'b0)begintimer_cnt<=1'b0;endelseif(clk_100khz_en==1'b1)beginif(timer_cnt<17'd99_999)begintimer_cnt<=timer_cnt+1'b1;endelsebegintimer_cnt<=1'b0;endendelsebegintimer_cnt<=timer_cnt;
endendassignultrasound_trig=(timer_cnt==1'b1)?1'b1:1'b0;//每隔一秒产生一次脉冲endmodule

image.png

目录
相关文章
|
存储 监控 开发工具
FPGA如何进行片上调试?
FPGA如何进行片上调试?
258 0
FPGA如何进行片上调试?
FPGA-超声波测距数码管显示系列(包含进制转换、均值滤波)
FPGA-超声波测距数码管显示系列(包含进制转换、均值滤波)
209 0
FPGA-超声波测距数码管显示系列(包含进制转换、均值滤波)
|
存储 内存技术
FPGA-RAM核的使用及调试
FPGA-RAM核的使用及调试
270 0
|
异构计算
【黑金原创教程】 FPGA那些事儿 SignalTap II 调试技巧
简介工具篇系列的第三本教程,讲述各种与SignalTap II 有关的调试技巧。目录[黑金原创教程] FPGA那些事儿《工具篇III》:File01 - 上线调试与下线调试[黑金原创教程] FPGA那些事儿《工具篇III》:File02 - SignalTap 扫盲[黑金原创教程] F...
1796 0
|
8天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的1024QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的1024QAM调制解调系统的仿真与实现。通过Vivado 2019.2进行仿真,分别在SNR=40dB和35dB下验证了算法效果,并将数据导入Matlab生成星座图。1024QAM调制将10比特映射到复数平面上的1024个星座点之一,适用于高数据传输速率的应用。系统包含数据接口、串并转换、星座映射、调制器、解调器等模块。Verilog核心程序实现了调制、加噪声信道和解调过程,并统计误码率。
27 1
|
29天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的64QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的64QAM调制解调通信系统的设计与实现,包括信号生成、调制、解调和误码率测试。系统在Vivado 2019.2中进行了仿真,通过设置不同SNR值(15、20、25)验证了系统的性能,并展示了相应的星座图。核心程序使用Verilog语言编写,加入了信道噪声模块和误码率统计功能,提升了仿真效率。
44 4
|
29天前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
1月前
|
存储 算法 数据处理
基于FPGA的8PSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本系统在原有的8PSK调制解调基础上,新增了高斯信道与误码率统计模块,验证了不同SNR条件下的8PSK性能。VIVADO2019.2仿真结果显示,在SNR分别为30dB、15dB和10dB时,系统表现出不同的误码率和星座图分布。8PSK作为一种高效的相位调制技术,广泛应用于无线通信中。FPGA凭借其高度灵活性和并行处理能力,成为实现此类复杂算法的理想平台。系统RTL结构展示了各模块间的连接与协同工作。
49 16
|
1月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本项目基于FPGA实现16QAM调制解调通信系统,使用Verilog语言编写,包括信道模块、误码率统计模块。通过设置不同SNR值(如8dB、12dB、16dB),仿真测试系统的误码性能。项目提供了完整的RTL结构图及操作视频,便于理解和操作。核心程序实现了信号的生成、调制、信道传输、解调及误码统计等功能。
42 3

热门文章

最新文章