FPGA时序问题:begin end之间的顺序执行代码是按照什么时钟频率执行的????还是其他时序方式?
2个回答
展开全部
首先,FPGA的代码不是被执行的,而是被综合成电路,begin end之间算是一个小的电路模块。所以其与时钟的关系要具体分析
首先是你定义的变量的类型有关,寄存器型reg 和线性wire两种常用类型中,只有寄存器型才可能一个时钟周期的延迟,效果类似于D触发器。
其次最关键的是begin-end模块之间几个寄存器变量赋值的先后关系是取决于 阻塞型赋值还是非阻塞型赋值。 阻塞型赋值 用 "=" ; 非阻塞赋值用"<=" 。
顾名思义 非阻塞赋值 语句 就是各个 reg型变量之间没有先后关系 在begin end 模块的时钟触发条件满足的时候,各个reg变量是同时进行赋值和运算的;而阻塞赋值语句使得不同的寄存器赋值语句之间按照代码的先后顺序进行赋值,后面的reg变量的赋值将会比前面一行延后一个时钟周期。
最后,值得注意的是 同一个begin end 模块之间不能混用 两种赋值语句,一般而言,时序电路always块中用 非阻塞赋值"<=" ,组合逻辑always块及assign 语句时用 阻塞赋值 "=" 。
首先是你定义的变量的类型有关,寄存器型reg 和线性wire两种常用类型中,只有寄存器型才可能一个时钟周期的延迟,效果类似于D触发器。
其次最关键的是begin-end模块之间几个寄存器变量赋值的先后关系是取决于 阻塞型赋值还是非阻塞型赋值。 阻塞型赋值 用 "=" ; 非阻塞赋值用"<=" 。
顾名思义 非阻塞赋值 语句 就是各个 reg型变量之间没有先后关系 在begin end 模块的时钟触发条件满足的时候,各个reg变量是同时进行赋值和运算的;而阻塞赋值语句使得不同的寄存器赋值语句之间按照代码的先后顺序进行赋值,后面的reg变量的赋值将会比前面一行延后一个时钟周期。
最后,值得注意的是 同一个begin end 模块之间不能混用 两种赋值语句,一般而言,时序电路always块中用 非阻塞赋值"<=" ,组合逻辑always块及assign 语句时用 阻塞赋值 "=" 。
威孚半导体技术
2024-08-19 广告
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层...
点击进入详情页
本回答由威孚半导体技术提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询