在时钟的上升沿和下降沿都对触发always块好不好

 我来答
dayinspring
高粉答主

2015-11-08 · 繁杂信息太多,你要学会辨别
知道大有可为答主
回答量:2.3万
采纳率:92%
帮助的人:3564万
展开全部
一、在不同的alwys语句里面在时钟的上升沿和下降沿对不同寄存器进行赋值
always @(posedge clk ) begin .......reg1<=....end //对寄存器1赋值
always @(negedge clk) begin .........reg2<=....end // 对寄存器1赋值
上升沿和下降沿都使用,就相当于是电平触发,电平触发比时钟沿触发更容易受到干扰,在高速时容易受干扰,不够好。

二、解决方法
方法1.先通过PLL锁相环产生两个频率相同相位差为180度的clk1,clk2,然后在每个clk的上升沿输出
always@(posedge clk1)
begin
...
end
always@(posedge clk2)
begin
...
end

方法2:通过PLL对clk进行倍频,得到clk2,那么clk2的上升沿也就是clk的下降沿
always@(posedge clk)
begin
...
end
always@(posedge clk2)//相当于clk的下降沿
begin
...
end

方法3:如果对clk的下降沿操作只是用于后面的使能之用,可以把clk分频得到clk_new; 例如:
always @(posedge clk)
begin
clk_new<=!clk_new;//把clk_new当作是新时钟用,信号都是在clk_new的上升和下降沿触发
end
always @(posedge clk_new)//clk_new的上升沿
begin
....
end
always @(posedge clk)///clk_new的下降沿,由于clk信号是clk_new的二倍频, begin
....
end

方法4:在低速信号处理的时候可以把clk取反得到一个新的时候clk_n
always @(posedge clk)
begin
end
always @(posedge clk_n)//取反后clk_n的上升沿也就是clk的上升沿
begin
end
匿名用户
2015-03-28
展开全部
regF1,F2;
always @(posedge CLK or negedge RSTn)
if(!RSTn)
begin
F1<=1'b1;
F2<=1'b1;
end
else
begin
F1<=SCKr;//需要检测的引脚
F2<=F1;
end
/******************************/
assign SCK_fallingedge = F2 && !F1;//检测时钟的上升沿
assign SCK_risingedge = F1 && !F2;//检测时钟的下降沿

always @(posedge CLK or negedge RSTn)
if(!RSTn) begin .... end
else if(SCK_fallingedge == 1)
bigin
//SCK_fallingedge为一表示上升沿到来,上升沿到来之后SCK_fallingedge会自动清零
end
else if(SCK_risingedge == 1)
begin
//同样,SCK_fallingedge为一表示下降沿到来,下降沿到来之后SCK_fallingedge会自动 清零
end
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式