关于异步置位的寄存器
时间: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后的信号
