40.简易频率计(基于等精度测量法)(3)

(1)BCD8421码:十进制数字转换成BCD8421码的方法

  • 补零:你需要显示多少位数字,就在前面补上四倍的位宽。比如你要显示一个十进制8位的数字,就在前面补上8*4=32个零。
  • 判断:判断补零部分显示的十进制数字,每位是否大于4,如果大于,则执行加3的操作。
  • 判断完成后,向左移位一位。
  • 最终位移次数与十进制数字位宽相同

(2)Verilog代码实现:

(3)仿真代码:

复制代码
`timescale 1ns/1ns

module BCD_8421_32_tb;

reg				clk			;
reg	[31:0]	data			;
reg				reset_n		;

wire  [3:0]			unit		;
wire  [3:0]			ten		;
wire  [3:0]			hun		;
wire  [3:0]			tho		;
wire  [3:0]			t_tho		;
wire  [3:0]			h_tho		;
wire  [3:0]			o_tho		;
wire  [3:0]			t_o_tho	;

initial clk = 1'd1	;
always #10 clk= ~clk	;

initial begin
	reset_n <= 1'd0;
	#15;
	reset_n <= 1'd1;
	data 	<= 32'd1234_5678;
	#30000;
	data <= 32'd9874_5612;
	#30000;
	$stop;
end

BCD_8421_32 BCD_8421_32_inst
(
			.clk			(clk		),
			.data			(data		),
			.reset_n		(reset_n	),
		
			.unit			(unit		),
			.ten			(ten		),
			.hun			(hun		),
			.tho			(tho		),
			.t_tho		(t_tho	),
			.h_tho		(h_tho	),
			.o_tho		(o_tho	),
			.t_o_tho		(t_o_tho	)
	
);

endmodule

(4)仿真波形:

(5)顶层设计:

复制代码
module freq_meter_top
(
	input 			clk			,
	input				reset_n		,
	input 			clk_test		,
	
	output			DIO			,
	output			SCLK			,
	output			RCLK			
);

	wire 		[31:0]		freq		;
	wire		[31:0]		data		;
	wire  	[3:0]			unit		;
	wire  	[3:0]			ten		;
	wire  	[3:0]			hun		;
	wire  	[3:0]			tho		;
	wire  	[3:0]			t_tho		;
	wire  	[3:0]			h_tho		;
	wire  	[3:0]			o_tho		;
	wire  	[3:0]			t_o_tho	;

freq_meter_calc freq_meter_calc_inst0
(
	.clk			(clk		)	,
	.reset_n		(reset_n	)	,
	.clk_test	(clk_test)	,

	.freq			(freq		)	
);

BCD_8421_32 BCD_8421_32_inst0
(
			.clk			(clk		),
			.data			(freq		),
			.reset_n		(reset_n	),
		
			.unit			(unit		),
			.ten			(ten		),
			.hun			(hun		),
			.tho			(tho		),
			.t_tho		(t_tho	),
			.h_tho		(h_tho	),
			.o_tho		(o_tho	),
			.t_o_tho		(t_o_tho	)
	
);

assign data = {t_o_tho,o_tho,h_tho,t_tho,tho,hun,ten,unit};

hex_top hex_top_inst
(
	.clk			(clk		),
	.reset_n		(reset_n ),
	.data			(data		),
	.DIO			(DIO		),
	.SCLK			(SCLK		),
	.RCLK			(RCLK		)
);


endmodule

(6)顶层仿真代码:

复制代码
`timescale 1ns/1ns

module freq_meter_top_tb;

reg		clk			;
reg		reset_n		;
reg		clk_test		;

wire  	DIO	;
wire 		SCLK	;
wire 		RCLK	;

initial clk = 1'd1;
always#10 clk = ~clk;

initial clk_test	= 1'd1;
always#100 clk_test = ~clk_test;

initial begin 
	reset_n <= 1'd0;
	#15;
	reset_n <= 1'd1;
	#2_000_000;
	$stop;
end


freq_meter_top freq_meter_top_inst
(
	.clk			(clk		),
	.reset_n		(reset_n	),
	.clk_test	(clk_test),
                
	.DIO			(DIO		),
	.SCLK			(SCLK		),
	.RCLK			(RCLK		)
);
	
	defparam freq_meter_top_inst.freq_meter_calc_inst0.MCNT0 = 27'd74_999;
	defparam freq_meter_top_inst.freq_meter_calc_inst0.MCNT1 = 27'd12_499;

endmodule

(7)仿真波形:

(8)引脚分配:

(9)实验现象:

相关推荐
我爱C编程14 小时前
【硬件片内测试】基于FPGA的4FSK扩频通信链路测试,包含帧同步,定时点,扩频伪码同步,信道,误码统计
fpga开发·帧同步·定时点·扩频通信·扩频伪码同步·4fsk
GateWorld15 小时前
Lattice FPGA开发全攻略--十余种输出文件格式及其区别
fpga开发·lattice·fpga开发工具
芯门1 天前
基于 Xilinx K7 FPGA 的全套万兆 10G GigE Vision 商业级传输方案
计算机视觉·fpga开发·万兆gige
ehiway1 天前
FPGA在未来产业中的应用潜力与商业机会分析
fpga开发
GateWorld1 天前
FPGA内部模块详解之第1篇 FPGA内部结构总览
fpga开发·fpga内部模块
爱吃汽的小橘1 天前
驱动GPIO使用GPIO中断模式
fpga开发
普密斯科技1 天前
精准把控每一处细节——FPGA焊点高度精准检测实施方案
人工智能·深度学习·数码相机·计算机视觉·fpga开发·测量
FPGA_小田老师1 天前
Xilinx AXI UART Lite IP核:IP核深度解析
fpga开发·uart·串口通讯·axi转uart
GateWorld1 天前
FPGA内部模块详解之二 FPGA的逻辑“心脏”——可编程逻辑块(PFU/CLB)深度解析
fpga开发·fpga内部结构
Saniffer_SH2 天前
【高清视频】如何针对电动汽车进行通信可靠性测试、故障注入与功率分析?
服务器·驱动开发·测试工具·fpga开发·计算机外设·硬件架构·压力测试