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如何进行片上调试?
404 0
FPGA如何进行片上调试?
FPGA-超声波测距数码管显示系列(包含进制转换、均值滤波)
FPGA-超声波测距数码管显示系列(包含进制转换、均值滤波)
364 0
FPGA-超声波测距数码管显示系列(包含进制转换、均值滤波)
|
存储 内存技术
FPGA-RAM核的使用及调试
FPGA-RAM核的使用及调试
501 0
|
异构计算
【黑金原创教程】 FPGA那些事儿 SignalTap II 调试技巧
简介工具篇系列的第三本教程,讲述各种与SignalTap II 有关的调试技巧。目录[黑金原创教程] FPGA那些事儿《工具篇III》:File01 - 上线调试与下线调试[黑金原创教程] FPGA那些事儿《工具篇III》:File02 - SignalTap 扫盲[黑金原创教程] F...
1920 0
|
算法 数据安全/隐私保护 异构计算
基于FPGA的变步长LMS自适应滤波器verilog实现,包括testbench
### 自适应滤波器仿真与实现简介 本项目基于Vivado2022a实现了变步长LMS自适应滤波器的FPGA设计。通过动态调整步长因子,该滤波器在收敛速度和稳态误差之间取得良好平衡,适用于信道均衡、噪声消除等信号处理应用。Verilog代码展示了关键模块如延迟单元和LMS更新逻辑。仿真结果验证了算法的有效性,具体操作可参考配套视频。
461 74
|
10月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于FPGA的SNN脉冲神经网络之LIF神经元verilog实现,包含testbench
本项目展示了 LIF(Leaky Integrate-and-Fire)神经元算法的实现与应用,含无水印运行效果预览。基于 Vivado2019.2 开发,完整代码配有中文注释及操作视频。LIF 模型模拟生物神经元特性,通过积分输入信号并判断膜电位是否达阈值产生脉冲,相较于 Hodgkin-Huxley 模型更简化,适合大规模神经网络模拟。核心程序片段示例,助您快速上手。
|
11月前
|
算法 数据安全/隐私保护 异构计算
基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比
本项目展示了一种基于FPGA的音频水印算法,采用LSB(最低有效位)技术实现版权保护与数据追踪功能。使用Vivado2019.2和Matlab2022a开发,完整代码含中文注释及操作视频。算法通过修改音频采样点的最低有效位嵌入水印,人耳难以察觉变化。然而,面对滤波或压缩等攻击时,水印提取可能受影响。该项目运行效果无水印干扰,适合实时应用场景,核心逻辑简单高效,时间复杂度低。
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16QAM调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本项目基于FPGA实现了16QAM基带通信系统,包括调制、信道仿真、解调及误码率统计模块。通过Vivado2019.2仿真,设置不同SNR(如8dB、12dB),验证了软解调相较于传统16QAM系统的优越性,误码率显著降低。系统采用Verilog语言编写,详细介绍了16QAM软解调的原理及实现步骤,适用于高性能数据传输场景。
600 69
|
11月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的2ASK+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR
本内容展示了基于Vivado2019.2的算法仿真效果,包括设置不同信噪比(SNR=8db和20db)下的结果及整体波形。同时,详细介绍了2ASK调制解调技术的原理与实现,即通过改变载波振幅传输二进制信号,并提供数学公式支持。此外,还涉及帧同步理论,用于确定数据帧起始位置。最后,给出了Verilog核心程序代码,实现了2ASK解调与帧同步功能,结合DDS模块生成载波信号,完成信号处理流程。
212 0

热门文章

最新文章