您的位置 首页 系统

硬件描绘言语Verilog HDL规划进阶之:主动转化量程频率计控制器

本实例使用Verilog HDL设计一个可自动转换量程的频率计控制器。在设计过程中,使用了状态机的设计方法,读者可根据综合实例6的流程将本实例的语言设计模块添加到自己的工程中。

4.7典型实例7:主动转化量程频率计操控器

4.7.1实例内容及方针

1.实例内容

本实例运用VerilogHDL规划一个可主动转化量程的频率计操控器。在规划过程中,运用了状况机的规划办法,读者可根据归纳实例6的流程将本实例的言语规划模块添加到自己的工程中。

2.实例方针

经过本实例,读者应到达下面的意图。

·把握运用Verilog规划状况机的办法。

·把握Verilog规划的一般办法。

4.7.2原理简介

频率计是电路调试里边常常用到的一种仪器。本实例说到的主动转化量程频率计操控器并不是解说怎么规划一个频率计,而是解说怎么规划这个频率计的量程转化机制。经过Verilog言语规划将量程转化变成主动化,自适应地将输入反映至量程上。

此主动转化量程频率计需求外部供给一个超量程信号和一个欠量程信号,代表输入比当时量程的状况。这两个信号能够经过其他的模块或许设备取得,读者可自行剖析。

一起,该频率计还向外部供给一个用于挑选标准时基的信号。经过该信号,频率计能够完结量程的切换和显现。读者可根据频率计其他模块的需求调整输出信号的规划。

4.7.3代码剖析

下面给出主动转化量程频率计操控器的Verilog源代码,首要介绍端口信号的界说及阐明,读者能够经过这些端口将此操控器模块实例化至自己的工程规划中。

·clk:输入时钟。

·clear:异步复位信号。

·reset:用来在量程转化开始时复位计数器。

·std_f_sel:用来挑选标准时基。

·cntover:代表超量程。

·cntlow:代表欠量程。

module control(std_f_sel,reset,clk,clear,cntover,cntlow);
//端口阐明
output[1:0] std_f_sel;
output reset;
input clk,clear,cntover,cntlow;

//内部信号阐明
reg[1:0] std_f_sel;
reg reset;
reg[5:0] present,next; //用于保存当时状况和次态的中心变量

//状况编码,选用独热码
parameter start_fl00k = 6b000001, //状况A
fl00k_cnt = 6b000010, //状况B
start_fl0k = 6b000100, //状况C
fl0k_cn = 6b001000, //状况D
start_flk = 6b010000, //状况E
flk_cnt = 6b100000; //状况F

always @(posedge clk or posedge clear) begin
if(clear)
present=start_fl0k; //异步复位至start_fl0k状况
else
present=next; //状况转化
end

always @(present or cntover or cntlow) begin //状况转化的触发信号列表
case(present) //用case句子描绘状况转化
start_fl00k: //100k量程状况
next=fl00k_cnt;
fl00k_cnt: begin //100k量程操控状况
if(cntlow) //欠量程
next=start_fl0k; //进入10k量程状况
else
next=fl00k_cnt; //坚持100k量程操控状况
end
start_fl0k: //10k量程状况
next=fl0k_cnt;
fl0k_cnt: begin //10k量程操控状况
if(cntlow) //欠量程
next=start_flk; //进入1k量程状况
else if(cntover) //过量程
next=start_fl00k; //进入100k量程状况
else
next=fl0k_cnt; //坚持1k量程操控状况
end
start_flk: //1k量程状况
next=flk_cnt;
flk_cnt: begin //1k量程操控状况
if(cntover) //过量程
next=start_fl0k; //进入10k量程状况
else
next=flk_cnt; //坚持1k量程操控状况
end
default:
next=start_fl0k; //缺省状况为10k量程状况
endcase
end

//各状况的输出操控模块
always @(present) begin
case(present)
start_fl00k: begin //100k量程状况输出操控
reset=1;
std_f_sel=2b00;
end
fl00k_cnt: begin //100k量程操控状况输出操控
reset=0;
std_f_sel=2b00;
end
start_fl0k: begin //10k量程状况输出操控
reset=1;
std_f_sel=2b01;
end
fl0k_cnt: begin //10k量程操控状况输出操控
reset=0;
std_f_sel=2b01;
end
start_flk: begin //1k量程状况输出操控
reset=1;
std_f_sel=2b11;
end
flk_cnt: begin //1k量程操控状况输出操控
reset=0;
std_f_sel=2b11;
end
default: begin //默许(10k量程)状况输出操控
reset=1;
std_f_sel=2b01;
end
endcase
end
endmodule

在状况机规划中,常常将状况转化和状况输出操控分为两个部分进行规划,便利言语的编写修正和读写规矩。鄙人面的源代码中读者应该留意这个规划的特色。

4.7.4参阅规划

本实例相关参阅规划文件在本书实例代码的“典型实例7”文件夹。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/xitong/194306.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部