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

相关推荐

  1. 基于FPGA的频率与串口通信(二)

    2024-07-19 08:26:02       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 08:26:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 08:26:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 08:26:02       58 阅读
  4. Python语言-面向对象

    2024-07-19 08:26:02       69 阅读

热门阅读

  1. 数据结构讲解

    2024-07-19 08:26:02       20 阅读
  2. C++:类的定义和实例化

    2024-07-19 08:26:02       22 阅读
  3. NumPy库学习之logspace函数

    2024-07-19 08:26:02       22 阅读
  4. springMVC前后端请求参数绑定和传递

    2024-07-19 08:26:02       18 阅读
  5. C++中的socket编程常用接口

    2024-07-19 08:26:02       19 阅读
  6. Redis实现打卡功能

    2024-07-19 08:26:02       20 阅读
  7. 探索.NET内存之海:垃圾回收的艺术与实践

    2024-07-19 08:26:02       22 阅读
  8. 【.NET全栈】ASP.NET开发Web应用——Web部件技术

    2024-07-19 08:26:02       18 阅读
  9. 基于Gunicorn、Flask和Docker的高并发部署

    2024-07-19 08:26:02       20 阅读
  10. ArcGIS Pro SDK (九)几何 5 多边形

    2024-07-19 08:26:02       21 阅读
  11. SpringBoot集成EasyExcel实现模板写入多个sheet导出

    2024-07-19 08:26:02       21 阅读
  12. python中excel的读取和写入

    2024-07-19 08:26:02       20 阅读