控制计数器暂停/连续计数设计可预置初值带使能控制端递减
发布时间:2023/6/8 8:59:51 访问次数:238
FPGA与CPLD有哪些主要区别?它们各有什么特点?
设计一个定时器。要求:
定时时间为24s,按递减方式计时,每隔1s,定时器减1。
设置两个外部控制开关(控制功能),控制定时器的直接复位、启动计时、暂停/连续计时。
当定时器递减计时到零(即定时时间到)时,定时器保持零不变,同时发出报警信号。
输入时钟脉冲的频率为1 Hz,输出为8421
定时器功能表BCD码。
解:逻辑设计,用计数器对1 Hz的时钟信号进行计数,其计数值即为定时时间。根据设计要求可知,电路需要输出2组8421BCD码,计数器初值为24,按递减方式计数,减到0时,输出报警信号,并能控制计数器暂停/连续计数,所以需要设计一个可预置初值的带使能控制端的递减计数器。
实现上述功能的Verilog HDL程序如下。HDL描述分为3部分:第一部分定义了电路的输入、输出信号。其输入信号为复位nRsT(低电平有效)、暂停/连续nPAusE和时钟CP。输出信号为TimerH(定时器的十位)、TimerL(定时器的个位)和报警Alarm。第二部分用一个连续赋值语句assign说明当计数器递减到0时,输出报警信号(Alarm=1)。第三部分用一个过程块always说明计数器的计数、处理操作,计数器的个位和十位均按8421BCD码方式递减计数。
input nRST,nPAUSE,CP; //定时器的输人信号
wire nRST,nPAUSE,CP;
output[3:0]TimerH,TimerL; //定时器的输出信号
reg[3:0] TimerH,TimerL;
output Alarm; //定时时间到,输出报警信号Alarm=1
assngn Alarm=({TimerH,TimerL}==8’h00)&(nRST==1i b1); //输出报
//警信号
always@(posedge CP or negedge nRST or negedge nPAUsE) //计数处理
begin
if( ~nRST)
{TimerH,TimerL}c8’h24; //复位时置初值24
eIse if(~nPAUsE)
{TimerH,TimerL}《-{TimerH,TimerL}; //暂停计时
else if({TimerH,TimerL}==8’h00) //定时时间到,保持0不变
begin{TimerH,TimerL}《={TimerH,TimerL};end
else nf(TimerL==4’hO)
begin TimerH 《= TimerHˉ11b1;TimerL 《=4’h9;end
e1se
begin TimerH 《= TimerH;TimerL 《= TimerLˉ1i b1;end
end∶Inodule
设计实现用CPLD器件实现上述设计的过程如下:
在Quartus Ⅱ软件中建立一个新的工程项目,输人上述HDL文件,对设计项目进行编译。
新建一个仿真波形文件,给出输人信号、输出信号的激励波形(图7.5.1中为方便仿真将时钟CP的周期设计为2 ms),对设计项目进行时序仿真,得到如图7.5.1所示的波形。分析波形图可知,开始和16~20 ms时,nRST为低电平,初值24被预置到计数器的输出TimerH、TimerL;4~8 ms时,nPAuSE为低电平,计数器暂停计数;其他时间nRsT、nPAUSE均为高电平,计数器在CP上升沿到来时递减计数,到68 ms之后,计数器一直输出为0,报警信号Alarm为高电平。仿真结果完全符合设计要求。
选定目标器件(例如EPM7032s),将输入、输出信号分配到器件相应的引脚上,然后重新编译设计项目,生成下载文件(文件后缀为,pof或.sof)。
将下载文件写人到目标器件中,就是一块专用的定时器电存储器、复杂可编程器件利明场可编程门阵列.
input nRST,nPAUSE,CP; //定时器的输人信号
wire nRST,nPAUSE,CP;
output[3:0]TimerH,TimerL; //定时器的输出信号
reg[3:0] TimerH,TimerL;
output Alarm; //定时时间到,输出报警信号Alarm=1
assngn Alarm=({TimerH,TimerL}==8’h00)&(nRST==1i b1); //输出报
//警信号
always@(posedge CP or negedge nRST or negedge nPAUsE) //计数处理
begin
if( ~nRST)
{TimerH,TimerL}c8’h24; //复位时置初值24
eIse if(~nPAUsE)
{TimerH,TimerL}《-{TimerH,TimerL}; //暂停计时
else if({TimerH,TimerL}==8’h00) //定时时间到,保持0不变
begin{TimerH,TimerL}《={TimerH,TimerL};end
else nf(TimerL==4’hO)
begin TimerH 《= TimerHˉ11b1;TimerL 《=4’h9;end
e1se
begin TimerH 《= TimerH;TimerL 《= TimerLˉ1i b1;end
end∶Inodule
设计实现用CPLD器件实现上述设计的过程如下:
在Quartus Ⅱ软件中建立一个新的工程项目,输人上述HDL文件,对
设计项目进行编译。
新建一个仿真波形文件,给出输人信号、输出信号的激励波形(图7.5.1中为方便仿真将时钟CP的周期设计为2 ms),对设计项目进行时序仿真,得到如图7.5.1所示的波形。分析波形图可知,开始和16~20 ms时,nRST为低电平,初值24被预置到计数器的输出TimerH、TimerL;4~8 ms时,nPAuSE为低电平,计数器暂停计数;其他时间nRsT、nPAUSE均为高电平,计数器在CP上升沿到来时递减计数,到68 ms之后,计数器一直输出为0,报警信号Alarm为高电平。仿真结果完全符合设计要求。
选定目标器件(例如EPM7032s),将输入、输出信号分配到器件相应的引脚上,然后重新编译设计项目,生成下载文件(文件后缀为,pof或.sof)。
将下载文件写人到目标器件中,就是一块专用的定时器电路。
http://yushuokj.51dzw.com深圳市裕硕科技有限公司
FPGA与CPLD有哪些主要区别?它们各有什么特点?
设计一个定时器。要求:
定时时间为24s,按递减方式计时,每隔1s,定时器减1。
设置两个外部控制开关(控制功能),控制定时器的直接复位、启动计时、暂停/连续计时。
当定时器递减计时到零(即定时时间到)时,定时器保持零不变,同时发出报警信号。
输入时钟脉冲的频率为1 Hz,输出为8421
定时器功能表BCD码。
解:逻辑设计,用计数器对1 Hz的时钟信号进行计数,其计数值即为定时时间。根据设计要求可知,电路需要输出2组8421BCD码,计数器初值为24,按递减方式计数,减到0时,输出报警信号,并能控制计数器暂停/连续计数,所以需要设计一个可预置初值的带使能控制端的递减计数器。
实现上述功能的Verilog HDL程序如下。HDL描述分为3部分:第一部分定义了电路的输入、输出信号。其输入信号为复位nRsT(低电平有效)、暂停/连续nPAusE和时钟CP。输出信号为TimerH(定时器的十位)、TimerL(定时器的个位)和报警Alarm。第二部分用一个连续赋值语句assign说明当计数器递减到0时,输出报警信号(Alarm=1)。第三部分用一个过程块always说明计数器的计数、处理操作,计数器的个位和十位均按8421BCD码方式递减计数。
input nRST,nPAUSE,CP; //定时器的输人信号
wire nRST,nPAUSE,CP;
output[3:0]TimerH,TimerL; //定时器的输出信号
reg[3:0] TimerH,TimerL;
output Alarm; //定时时间到,输出报警信号Alarm=1
assngn Alarm=({TimerH,TimerL}==8’h00)&(nRST==1i b1); //输出报
//警信号
always@(posedge CP or negedge nRST or negedge nPAUsE) //计数处理
begin
if( ~nRST)
{TimerH,TimerL}c8’h24; //复位时置初值24
eIse if(~nPAUsE)
{TimerH,TimerL}《-{TimerH,TimerL}; //暂停计时
else if({TimerH,TimerL}==8’h00) //定时时间到,保持0不变
begin{TimerH,TimerL}《={TimerH,TimerL};end
else nf(TimerL==4’hO)
begin TimerH 《= TimerHˉ11b1;TimerL 《=4’h9;end
e1se
begin TimerH 《= TimerH;TimerL 《= TimerLˉ1i b1;end
end∶Inodule
设计实现用CPLD器件实现上述设计的过程如下:
在Quartus Ⅱ软件中建立一个新的工程项目,输人上述HDL文件,对设计项目进行编译。
新建一个仿真波形文件,给出输人信号、输出信号的激励波形(图7.5.1中为方便仿真将时钟CP的周期设计为2 ms),对设计项目进行时序仿真,得到如图7.5.1所示的波形。分析波形图可知,开始和16~20 ms时,nRST为低电平,初值24被预置到计数器的输出TimerH、TimerL;4~8 ms时,nPAuSE为低电平,计数器暂停计数;其他时间nRsT、nPAUSE均为高电平,计数器在CP上升沿到来时递减计数,到68 ms之后,计数器一直输出为0,报警信号Alarm为高电平。仿真结果完全符合设计要求。
选定目标器件(例如EPM7032s),将输入、输出信号分配到器件相应的引脚上,然后重新编译设计项目,生成下载文件(文件后缀为,pof或.sof)。
将下载文件写人到目标器件中,就是一块专用的定时器电存储器、复杂可编程器件利明场可编程门阵列.
input nRST,nPAUSE,CP; //定时器的输人信号
wire nRST,nPAUSE,CP;
output[3:0]TimerH,TimerL; //定时器的输出信号
reg[3:0] TimerH,TimerL;
output Alarm; //定时时间到,输出报警信号Alarm=1
assngn Alarm=({TimerH,TimerL}==8’h00)&(nRST==1i b1); //输出报
//警信号
always@(posedge CP or negedge nRST or negedge nPAUsE) //计数处理
begin
if( ~nRST)
{TimerH,TimerL}c8’h24; //复位时置初值24
eIse if(~nPAUsE)
{TimerH,TimerL}《-{TimerH,TimerL}; //暂停计时
else if({TimerH,TimerL}==8’h00) //定时时间到,保持0不变
begin{TimerH,TimerL}《={TimerH,TimerL};end
else nf(TimerL==4’hO)
begin TimerH 《= TimerHˉ11b1;TimerL 《=4’h9;end
e1se
begin TimerH 《= TimerH;TimerL 《= TimerLˉ1i b1;end
end∶Inodule
设计实现用CPLD器件实现上述设计的过程如下:
在Quartus Ⅱ软件中建立一个新的工程项目,输人上述HDL文件,对
设计项目进行编译。
新建一个仿真波形文件,给出输人信号、输出信号的激励波形(图7.5.1中为方便仿真将时钟CP的周期设计为2 ms),对设计项目进行时序仿真,得到如图7.5.1所示的波形。分析波形图可知,开始和16~20 ms时,nRST为低电平,初值24被预置到计数器的输出TimerH、TimerL;4~8 ms时,nPAuSE为低电平,计数器暂停计数;其他时间nRsT、nPAUSE均为高电平,计数器在CP上升沿到来时递减计数,到68 ms之后,计数器一直输出为0,报警信号Alarm为高电平。仿真结果完全符合设计要求。
选定目标器件(例如EPM7032s),将输入、输出信号分配到器件相应的引脚上,然后重新编译设计项目,生成下载文件(文件后缀为,pof或.sof)。
将下载文件写人到目标器件中,就是一块专用的定时器电路。
http://yushuokj.51dzw.com深圳市裕硕科技有限公司