接口简单且易操作的VerilogHDL的背景噪声扣除电路设计

网友投稿 301 2022-11-04

接口简单且易操作的VerilogHDL的背景噪声扣除电路设计

1 引言

2 背景噪声扣除电路原理

图1经斩光器调制后由光电倍增管输出的信号

背景噪声扣除原理简单,但时序控制较繁琐。原有电路因布线面积和硬件芯片不易过多等诸多考虑,计数周期及启停控制采用软件两次中断设置来实现。如图2所示第一次为中断本文课题于国家自然科学基金资助项目项目批准号:60538020为启动计数,查询到斩光器信号第一个上升沿时进入,设置好计数周期后再次启动MCU片内计数器,以保证准确的查询到第一个上升沿时启动计数器。第二次为停止中断,采集计数周期溢出后停止计数。

图2 软件控制采集计数启停流程图

(a) MCU查询计数完成流程图 (b)中断执行计数器的启停控制流程图

易见原背景噪声扣除功能单元需要与MCU接口的数据线较多,需16条,且因不同微处理器片内资源不同,软件操作可能会更繁琐,可移植性不强。

综上,如果将背景噪声扣除功能单元设计成一个8位数据总线接口,高低字节分时复用,能对16位二进制数预置数和计数周期进行设置,操作上仅由MCU给出启动信号后,等查询完成信号便可读取计数结果的电路,则可大大减少线路板面积,使接口更简单,提高可操作性和移植性。

3 背景噪声扣除电路的VerilgHDL设计

主模块负责调用其它三个模块,并将输入输出接口进行连接。16位二进制加减计数模块负责在信号脉冲到来时,对给定的预置数在调制周期的高电平时加计数,在低电平时减计数。采集控制模块负责当MCU给出允许计数命令后,自动查询调制频率的第一个上升沿启动计数,在计数周期达到后停止计数,完成计数后通知MCU。读写接口模块负责与MCU接口,接收储存计数周期(斩光器信号或调制信号的周期数)和16位的预置数,并将最后计数结果返回MCU。

图3 背景噪声扣除主模块综合生成原理图的外部接口

16位二进制加减计数模块(bit16addsub)是背景扣除电路的具体实现单元,代码如下所示。

module bit16addsub(

input wire FREQU,//采样频率输入

input wire CHOP_IN,//斩光器输入

input EN,//启停控制

input wire CLR,//请零

input wire [15:0] STA_NUM,//初始数值

output reg[15:0] result_num //计数结果输出

);

always @(posedge FREQU or posedge CLR)//对采集信号和清零信号敏感

begin

if(CLR==1)//清零

result_num<=STA_NUM;//重新读入预置数

else if(EN==1&&CHOP_IN==1&&FREQU==1)

result_num<=result_num+1;//在使能的状态下调制的信号高电平时加计数

else if(CHOP_IN==0&&EN==1&&FREQU==1)

result_num<=result_num-1;//在使能的状态下调制信号的低电平时减计数

end

endmodule

采集控制模块(Ctrol)是整个设计的时序控制核心,它输出的ctrol与16位二进制加减计数模块(bit16addsub)的EN向连接便可实现自动控制计数的启动,待计数周期溢出时停止,计数完成后由stopsign后给出高电平信号通知MCU。其完整代码如下:

module Ctrol(input wire reset, //复位信号

input wire cpu_alw, //MCU允许信号

input wire chop_in, //斩光器输入计数

input wire [16:0] status_in, //计数周期数值

output reg ctrol, //加减计数器的启停控制信号

output reg stopsign //计数完成信号

);

reg [16:0]num_count;//内部计数周期寄存器

always @(posedge reset or posedge chop_in)

begin

if(reset)//复位

begin

num_count<=status_in; //读入计数周期

ctrol<=0;            //停止计数

stopsign<=0;         //没有完成计数

end

else if(chop_in==1&&cpu_alw==1)//允许计数

begin

if(num_count>0) //采集未完成

begin

ctrol<=1;          //16加减计数器使能

num_count<=num_count-1;//计数周期减一

end

else

begin

ctrol<=0;           //计数停止

stopsign<=1;        //通知MCU

end

end

end

endmodule

读写接口模块(Addselec)在编程时采用通用的双向数据总线输入输出方法,经过a2_0的3线译码选择寄存器地址,可对计数周期和预置数进行赋值,并可读出最后计数结果。表1给出了译码对应的寄存器地址。

表1 a2_0译码选择真值表

图4给出了使用ModelSim 软件对写信号有效的仿真波形,显示最后计数周期低、高8位写入的数值为00000101、00000000,预置数低、高8位数值为00000011、00000000。

图4 计数周期和预置数在总线写入时的波形仿真结果

4背景噪声扣除电路与MCU接口及软件操作

图5背景噪声扣除电路的软件操作流程

采用上述设计的集成背景噪声扣除电路在与MCU接口时十分方便。以MCS51系列单片机8051为例,最简单的连接方式为采用P1口与CLR、cpu_alw、stop_sign相连接,址线与CS、a2_0连接(可据电路规模设置片选方式),数据线、读写正常连接即可。软件操作不需要中断,操作流程如图5所示。更简单的做法是在系统初始化时将预置数和计数周期赋值为固定值即可。

5 结束语

本文介绍了采用计数器与门电路组成的背景噪声扣除电路的实现原理和工作方式,并分析了其局限性,然后提出了一种基于VerilogHDL 语言的背景噪声扣除电路的设计,使电路接口更为简单,软件更易操作,增强了移植性。该设计已经应用于在研的紫外遥感仪器中,为仪器的更新换代提供了技术支持。本文以通用性和简便性出发设计的背景噪声扣除电路的设计,将适用于以光电调制微弱直流量转换为交流信号测量的方案。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:16个核心概念入门Kubernets
下一篇:Java List 集合如何去除null元素
相关文章

 发表评论

暂时没有评论,来抢沙发吧~