微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于异步置位的寄存器

关于异步置位的寄存器

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

一个寄存器需要异步置位,这样verilog表达就是always @(posedge clk or negedge set) ........但是这个寄存器的值是某些电路的判断依据,所以需要初始化,但是可综合的寄存器至多一个置位信号,要怎么办啊?
如果要求初始化也是异步的是不是不可能实现?同步初始化我没有问题,clk边沿初始化if(rst)即可。
简而言之,是不是不可能有两个异步置位的触发器。

两个需要异步复位的信号posedge先相或,negedge先相与后作为置位信号。

good experience to share for me


不错

一个寄存器需要异步置位?
为什么非要异步置位呢?为何不用同步
我喜欢的写法
always@(posedge clk or negedge por_n)
if(!por_n)
初始化
else if(rst)
同步置位
else if  ....

应该是可以有两个异步复位的

用同步复位是比较可行的方法
实际上我看不到非要使用异步置位的理由,一般来说是不需要的。

学习了,感谢

e ,,,该怎么解决呢?

每一个触发器都必须有一个复位信号,但其必须被该触发器的时钟同步。

复位信号可以是同步的,也可以是异步的。
一个好的设计是不应该依赖复位的。

async reset and async set:
  always @(posedge clk or posedge reset or posedge set)

如果要求复位值和置位值不同的话,把置位信号和复位信号相与,作为异步置位/复位信号,如:
always@(posedge clk or negedge rst_set_n) begin
if(set_n == 1'b0)
     tmp <= 8'd2;
else if(rst_n == 1'b0)
    tmp <= 8'd0;
else........

先把初始化信号和置位信号相或,在把相或的信号作为always@中的negedge后的信号

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

网站地图

Top