软件
Quartus
语言
VHDL
代码功能
该设计实现了核心逻辑控制与数据处理,包含时钟与复位管理、输入输出接口以及状态机控制。主要模块包括:Frq_Ctrl、LED_DISP、counter、data_store、div_400Hz。设计聚焦关键功能的实现与时序约束,强调可综合性与可移植性,适合在VHDL环境下进行快速迭代与验证。
设计文档:
相关图片
代码实现思路
总体思路采用自顶向下的层次化设计,先明确接口与约束,再细化功能模块。时序方面以同步时钟为主,统一复位策略,关键路径通过流水线或并行分解降低延迟。控制部分使用有限状态机组织流程,数据路径依据接口协议进行缓冲与握手。验证阶段采用仿真与综合联合检查,覆盖边界条件与异常输入,确保在FPGA平台上稳定运行。核心模块:Frq_Ctrl、LED_DISP、counter、data_store、div_400Hz,分别承担接口、控制与运算等职责。
代码结构
整体结构采用分层与模块化设计:顶层负责接口与时序组织,中间层拆分为控制与数据通道,底层为具体算法与外设驱动。通过统一的时钟与复位策略维持同步,关键路径引入流水线降低延迟。模块间通过明确的端口协议进行耦合与解耦,便于复用与扩展。主要子模块包括:Frq_Ctrl、LED_DISP、counter、data_store、div_400Hz、frequency_check、frequency_check_vlg_tst、test_sig 等,各自承担接口适配、状态机控制、缓存与计算等职责,形成清晰可维护的架构。
部分代码
| //频率计门控法
module frequency_check( input clk,//50MHz input signal_in,//被测信号 output ts_50M, output ts_10M, output ts_1M, output ts_100K, output ts_10K, output ts_1K, output [7:0] LED_BIT, output [7:0] LED_SEG );
wire En; wire Rst; wire Lat; wire clk_400Hz; //分频模块 test_sig U_test_sig( . clk(clk),//50MHz . ts_50M(ts_50M), . ts_10M(ts_10M), . ts_1M(ts_1M), . ts_100K(ts_100K), . ts_10K(ts_10K), . ts_1K(ts_1K) );
//分频到400Hz div_400Hz U_div_400Hz( . clk_50MHz(clk),//50MHz . clk_400Hz(clk_400Hz) );
//控制模块 Frq_Ctrl U_Frq_Ctrl( . clk(clk),//50MHz . En(En),//使能 . Rst(Rst),//清零 . Lat(Lat)//锁存 );
wire [31:0] Freq_cnt; wire [3:0] Freq_cnt_0;//锁存值 wire [3:0] Freq_cnt_1;//锁存值 wire [3:0] Freq_cnt_2;//锁存值 wire [3:0] Freq_cnt_3;//锁存值 wire [3:0] Freq_cnt_4;//锁存值 wire [3:0] Freq_cnt_5;//锁存值 wire [3:0] Freq_cnt_6;//锁存值 wire [3:0] Freq_cnt_7;//锁存值 //计数器模块 counter U_counter ( . signal_in(signal_in),//测试信号 . En(En),//使能 . Rst(Rst),//复位 . Freq_cnt(Freq_cnt) );
//锁存器,锁存后将数据转换为BCD码 data_store U_data_store( . Lat(Lat),//锁存信号 . Freq_cnt(Freq_cnt),//输入 . Freq_cnt_0(Freq_cnt_0),//锁存值 . Freq_cnt_1(Freq_cnt_1),//锁存值 . Freq_cnt_2(Freq_cnt_2),//锁存值 . Freq_cnt_3(Freq_cnt_3),//锁存值 . Freq_cnt_4(Freq_cnt_4),//锁存值 . Freq_cnt_5(Freq_cnt_5),//锁存值 . Freq_cnt_6(Freq_cnt_6),//锁存值 . Freq_cnt_7(Freq_cnt_7)//锁存值 );
//LED显示 LED_DISP U_LED_DISP( . clk_400Hz(clk_400Hz),//400KHz时钟 . Freq_cnt_0(Freq_cnt_0),//锁存值 . Freq_cnt_1(Freq_cnt_1),//锁存值 . Freq_cnt_2(Freq_cnt_2),//锁存值 . Freq_cnt_3(Freq_cnt_3),//锁存值 . Freq_cnt_4(Freq_cnt_4),//锁存值 . Freq_cnt_5(Freq_cnt_5),//锁存值 . Freq_cnt_6(Freq_cnt_6),//锁存值 . Freq_cnt_7(Freq_cnt_7),//锁存值 . LED_BIT(LED_BIT),//数码管位选 . LED_SEG(LED_SEG)//数码管段选 );
endmodule
|
245