Spartan 6 FPGA 设计HC-SR04超声波测距实验VERILOG源码 Xilinx ISE14.6 工程文件
/每秒产生1个超声波测距模块所需的10us高脉冲激励,并用chipscope pro查看回响信号
module sp6(
input ext_clk_25m, //外部输入25MHz时钟信号
input ext_rst_n, //外部输入复位信号,低电平有效
output ultrasound_trig, //超声波测距模块脉冲激励信号,10us的高脉冲
input ultrasound_echo, //超声波测距模块回响信号
output[0:0] led //D2指示灯
);
//-------------------------------------
//PLL例化
wire clk_12m5; //PLL输出12.5MHz时钟
wire clk_25m; //PLL输出25MHz时钟
wire clk_50m; //PLL输出50MHz时钟
wire clk_100m; //PLL输出100MHz时钟
wire sys_rst_n; //PLL输出的locked信号,作为FPGA内部的复位信号,低电平复位,高电平正常工作
pll_controller uut_pll_controller
(// 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
//-------------------------------------
//25MHz时钟进行分频,产生一个100KHz频率的时钟使能信号
wire clk_100khz_en; //100KHz频率的一个时钟使能信号,即每10us产生一个时钟脉冲
clkdiv_generation uut_clkdiv_generation(
.clk(clk_25m), //时钟信号
.rst_n(sys_rst_n), //复位信号,低电平有效
.clk_100khz_en(clk_100khz_en) //100KHz频率的一个时钟使能信号,即每10us产生一个时钟脉冲
);
//-------------------------------------
//每秒产生一个10us的高脉冲作为超声波测距模块的激励
ultrasound_controller uut_ultrasound_controller(
.clk(clk_25m), //时钟信号
.rst_n(sys_rst_n), //复位信号,低电平有效
.clk_100khz_en(clk_100khz_en), //100KHz频率的一个时钟使能信号,即每10us产生一个时钟脉冲
.ultrasound_trig(ultrasound_trig), //超声波测距模块脉冲激励信号,10us的高脉冲
.ultrasound_echo(ultrasound_echo) //超声波测距模块回响信号
);
//-------------------------------------
//input信号必须经过IBUF后,才能作为chipscope中查看
wire ultrasound_echo_r;
IBUF #(
.IOSTANDARD("DEFAULT") // Specify the input I/O standard
)IBUF_inst (
.O(ultrasound_echo_r), // Buffer output
.I(ultrasound_echo) // Buffer input (connect directly to top-level port)
);
assign led[0] = ultrasound_echo_