微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 两个always块同时对一个reg类型变量赋值的问题 详见附件word

两个always块同时对一个reg类型变量赋值的问题 详见附件word

时间:10-02 整理:3721RD 点击:

问题描述:

pps信号为秒脉冲信号(GPS授时模块中的同步秒脉冲),每个一秒钟给fpga发送一个信号,稳定精度为20ns左右,而且占空比可调(与该问题无关)。

一个rom 由m4k块产生,大小为8bit位宽,64words,即地址总线位宽为6位宽,事先存放好编辑好的数据。rom中的数为0-255,由8bit决定。


秒脉冲pps信号,连接到一个6位宽的计数器counter1,每来一个pps信号,计数器加一,作为rom的地址,同时,pps信号还作为rom的时钟信号,pps信号到来时,就可以在rom的输出端口得到存储在rom中某个单元的一个值,具体由来了多少个pps信号决定(因为pps决定地址选择)。


功能:秒脉冲pps到来,产生counter1,输出rom后,同时产生一个新的计数器counter2(自增计数器),将rom作为该计数器的脉冲计数个数,计数器counter2 计数单位为系统时钟 sys_clk;当计数器到达rom计数后,将输出信号output信号置1,持续500ns(或指定25个数个系统时钟)后,output信号置0,此时,1秒钟还没有到呢,才过去5500ns,等来下一个秒脉冲pps[i+1]到来,重复以上动作,直到第62个秒脉冲pps到来,后结束。

为什么 5500ns:系统时钟50mhz 即周期20ns。从收到秒脉冲pps时,到output信号置0,所经历的最长时间:计算如下:

假设,rom=255 则 rom*20ns = 5100ns 再加上output为1的持续时间500ns 共计 5500ns,即1秒钟还没到呢。

综合来讲要实现的功能为:每当秒脉冲pps信号到来,即启动计数器,计数的脉冲个数由rom中指定单元的数据给出,计数器到时后,fpga上某一引脚(记为output)输出为1,持续可设定的时间,如500ns。

module launch (sys_clk,rst_n,pps,rom_addr,rom_value,launch);


input sys_clk;

input rst_n;

input pps;

output rom_addr;

output rom_value;

output launch;


reg launch;

wire [5:0 ]rom_addr;

wire [7:0 ]rom_value;


counter_lpm

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top