最近一直都比较忙,做了一些东西但是没有时间更新博客,这次写个小玩物,也可以说是一个实验,实现效果不错,很适合初学者自己动手做一个。
首先先上实物图

实验平台:EGO1开发板
FPGA型号:xc7a35tcsg324-1
代码平台:VIVADO
实现功能:按键数码管计数,0-99,麦克风控制舵机旋转,舵机旋转为顺时针180°后迅速转回,每次麦克风收到声音后,舵机会在转与不转中来回切换,流水灯在流与不流之间切换。
下面我们看RTL图

1.顶层文件
`timescale 1ns/1ps
module class_design_top(
input clk,
input mic_in,
input rst_n,
input key1,
output [5:0] seg_sel,
output [7:0] seg_data,
output pwm_out,
output [15:0] led_out
);
wire clk_en;
reg mic_in_r1 = 1'b1;
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
mic_in_r1 = 1'b1;
else
mic_in_r1 <= mic_in;
end
pwm_out li(
.clk(clk_en),
.rst_n(rst_n),
.pwm_out(pwm_out)
);
mic_switch li1(
.clk(clk),
.rst_n(rst_n),
.sound_in(mic_in_r1),
.clk_en(clk_en)
);
flowing_light li2(
.clk(clk_en),
.rst(rst_n),
.led(led_out)
);
wire button_posedge;
ax_debounce ax_debounce_m0
(
.clk (clk),
.rst (~rst_n),
.button_in (key1),
.button_posedge (button_posedge),
.button_negedge (),
.button_out ()
);
wire[3:0] count;
wire t0;
count_m10 count10_m0(
.clk (clk),
.rst_n (rst_n),
.en (button_posedge),
.clr (1'b0),
.data (count),
.t (t0)
);
wire[3:0] count1;
wire t1;
count_m10 count10_m1(
.clk (clk),
.rst_n (rst_n),
.en (t0),
.clr (1'b0),
.data (count1),
.t (t1)
);
wire[6:0] seg_data_0;
seg_decoder seg_decoder_m0(
.bin_data (count),
.seg_data (seg_data_0)
);
wire[6:0] seg_data_1;
seg_decoder seg_decoder_m1(
.bin_data (count1),
.seg_data (seg_data_1)
);
seg_scan seg_scan_m0(
.clk (clk),
.rst_n (rst_n),
.seg_sel (seg_sel),
.seg_data (seg_data),
.seg_data_0 ({1'b1,7'b1111_111}),