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

相关推荐
szxinmai主板定制专家11 小时前
柔宇柔性显示屏+x86、arm显示解决方案,还有库存
arm开发·人工智能·fpga开发
CHY_12812 小时前
JESD204B 协议解析(5)ILA序列
fpga开发·jesd204
yang)14 小时前
PLL之鉴相器PFD
fpga开发
FPGA_无线通信17 小时前
RRU CFR算法
fpga开发
国科安芯19 小时前
AS32系列MCU芯片TIM模块的捕获和比较
单片机·嵌入式硬件·fpga开发·架构·risc-v
kk哥889919 小时前
高性能计算 FPGA 开发:Quartus Prime 18.0 下载安装教程 高带宽内存(HBM2)支持
fpga开发
FPGA_无线通信21 小时前
RRU 1588同步
fpga开发
燎原星火*2 天前
FMC接口定义
fpga开发
CHY_1282 天前
JESD204B 协议解析(4)Subclass2 时序分析
嵌入式硬件·fpga开发·jesd204
FPGA_无线通信2 天前
FPGA rgmii/gmii
fpga开发