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)实验现象:

相关推荐
LCMICRO-1331084774630 分钟前
国产长芯微LDC4048完全P2P替代DAC128S085,是一款 8 通道、带输出放大器的数模转换器 (DAC)
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·数模转换器dac
雅斯驰33 分钟前
逐周期限流+频率折返+热关断:TPS54360DDAR的全套保护机制解析
fpga开发
雅斯驰36 分钟前
电流模式控制+快速瞬态响应:LTM4650AY的FPGA供电技术解析
stm32·单片机·嵌入式硬件·物联网·fpga开发·汽车
北京青翼科技14 小时前
青翼科技PCIe总线架构的2路10G光纤通道适配器丨数据采集卡丨PCIe接口板卡 2 路 SFP+光纤收发器
fpga开发·采集卡·fpga板卡·pcie接口·多功能板卡
9527华安16 小时前
2026年FPGA就业培训,临时抱佛脚版本
fpga开发
水云桐程序员16 小时前
Quartus II集成开发环境 |FPGA
笔记·fpga开发·硬件工程·创业创新
XINVRY-FPGA2 天前
XC7VX690T-2FFG1157I Xilinx AMD Virtex-7 FPGA
arm开发·人工智能·嵌入式硬件·深度学习·fpga开发·硬件工程·fpga
Terasic友晶科技2 天前
【案例展示】友晶科技全息传感器桥接解决方案
科技·fpga开发·holoscan·agilex 5·terasic
学习永无止境@2 天前
Verilog中有符号数计算
图像处理·算法·fpga开发
学习永无止境@2 天前
Sobel边缘检测的MATLAB实现
图像处理·opencv·算法·计算机视觉·fpga开发