0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog中clk为什么要用posedge,而不用negedge

FPGA设计论坛 来源:FPGA设计论坛 作者:FPGA设计论坛 2022-08-31 15:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

取某个信号的上升沿或下降沿信号

取一个信号的上升沿或下降沿信号,可以通过将信号delay后,然后将原信号和delay信号,通过不同的与非操作,获取上升沿信号或下降沿信号: 阶段一: reg delay; // delay信号 always @ ( posedge clk or negedge rstn ) if( !rstn ) delay <= 0; else delay <= orig;   // orig是原信号 wire pos_signal = orig && ( ~delay ); // 原信号上升沿位置处产生的pulse信号 wire neg_signal = ( ~orig ) && delay; // 原信号下降沿位置处产生的pulse信号 阶段二: 上述操作会存在亚稳态问题,并且得到的上升沿信号pos_signal和下降沿信号neg_signal无法被原采样时钟clk采样。正确做法是,先将原信号用采样时钟delay 2次(打两拍),得到和采样时钟同时钟域的信号delay2,然后再按上述方法获取上升沿和下降沿信号,这时得到的上升沿或下降沿就可以被原采样时钟采样。 例句如下: reg ori_signal;// 需取上升沿或下降沿的原信号 reg delay1; reg delay2; always @ ( posedge clk or negedge rstn ) if( !rstn ) delay1 <= 0; else delay1 <= ori_signal;    always @ ( posedge clk or negedge rstn ) if( !rstn ) delay2 <= 0; else delay2 <= delay1;  // delay2 已与clk同域 reg delay3; always @ ( posedge clk or negedge rstn ) if( !rstn ) delay3 <= 0; else delay3 <= delay2;    wire pos_signal = delay2 && ( ~delay3 ); // 原信号上升沿位置处产生的pulse信号 wire neg_signal = ( ~delay2 ) && delay3; // 原信号下降沿位置处产生的pulse信号 上升沿电路如下:465c7812-2901-11ed-ba43-dac502259ad0.jpg        注意:前两个触发器的运用就是起同步作用,将某个信号同步到采样时钟域,以后要重点注意使用。 阶段三: 用阶段二的语句会比较繁琐,可以用下述语句简化: reg[2:0] delay; always @ ( posedge clk or negedge rstn ) if( !rstn ) delay <= 0; else delay <= { delay[1:0], ori_signal} ; // ori_signal是原信号 wire pos_signal = delay[1] && ( ~delay[2] ); // 原信号上升沿位置处产生的pulse信号 wire neg_signal = ( ~delay[1] ) && delay[2]; // 原信号下降沿位置处产生的pulse信号

Verilog中clk为什么要用posedge,而不用negedge

posedge是上升沿,电平从低到高跳变

negedge是下降沿,电平从高到低跳变

对于典型的counter逻辑

always @(posedge sys_clk or negedge sys_rst_n) begin

if(!sys_rst_n)

counter <= 24'd0;//十进制0

else if(counter < led_time) begin

flag_counter = 1'b0;

counter <= counter + 1'b1;

end

else begin

counter <= 24'd0;

flag_counter = 1'b1;

end

end

clk为什么要用posedge,而不用negedge呢?

一般情况下,系统中统一用posedge,避免用negedge,降低设计的复杂度,可以减少出错。

在ModelSim仿真中,时钟是很严格的,但是在真实的晶振所产生的clock却是不严格的,比如高电平和低电平的时间跨度不一样,甚至非周期性的微小波动。如果只使用posedge,则整个系统的节拍都按照clock上升沿对齐,如果用到了negedge,则系统的节拍没有统一到一个点上。上升沿到上升沿肯定是一个时钟周期,但是上升沿到下降沿却很可能不是半个周期。这都会出现问题。

FPGA特有的东西:Global CLK。FPGA内部有专门的CLK“线”,和一般的逻辑门的走法不一样,目的是为了保证整个FPGA片内的时钟一致,这个东西就叫GlobalCLK

467e5dce-2901-11ed-ba43-dac502259ad0.png

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    30

    文章

    1370

    浏览量

    114159
  • 触发器
    +关注

    关注

    14

    文章

    2051

    浏览量

    63050
  • 上升沿
    +关注

    关注

    0

    文章

    3

    浏览量

    1899

原文标题:Verilog学习笔记

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如果将蜂鸟的risc-v移植到其他的fpga想实现一些外设功能有什么办法?可以不用操作系统直接添加verilog代码吗?

    请问如果将蜂鸟的risc-v移植到其他的fpga想实现一些外设功能有什么办法?可以不用操作系统直接添加verilog代码吗?
    发表于 11-10 06:35

    【高云GW5AT-LV60 开发套件试用体验】三、LED灯控制实验

    [31:0] counter;// 32位计数器 // 计数器逻辑 always @(posedge clk or negedge rst_n) begin if (!rst_n) begin
    发表于 07-21 05:57

    CANFD模块CLK_GR5如何配置?

    ,其中描述CANFD会用到两个时钟,其中的CLK_GR5 (CLK_SYS)在SDL例程没有找到相关配置代码,请问这部分在哪里配置,还是使用默认配置即可?
    发表于 07-14 06:06

    【高云GW5AT-LV60 开发套件试用体验】点亮LED

    clkout0 ); wire sys_rst_n = lock; reg [26:0]delay_cnt; always@(posedge clk_100M or negedge sys_rst_n
    发表于 06-18 17:16

    寻找verilog高手,有报酬

    我采集了一块电路板正常工作时的数据,基于这些数据我想用EPM7128slc84-15(sys_clk:50Mhz)测试电路板,寻求一位verilog高手,有偿
    发表于 03-08 16:31

    Verilogsigned和$signed()的用法

    吗?其实不是的,因为有符号数和无符号数据的加法强结果和乘法器结构是一样的,signed的真正作用是决定如何对操作数扩位的问题。 2、verilog的加法和乘法操作前,会先对操作数据扩位成结果相同的位宽,然后进行加法或者乘法处理。比如a/b都为4位数据,c为5位数据,c
    的头像 发表于 02-17 17:47 1192次阅读
    <b class='flag-5'>Verilog</b><b class='flag-5'>中</b>signed和$signed()的用法

    【RA-Eco-RA4E2-64PIN开发板试用】I2C与I3C通信协议的应用

    。 assign语句得到clk_divide=50,这里的>>2\'d2,是1/4倍频的作用。 else if()的语句是得到clk_cnt=25,这里的clk
    发表于 01-21 10:40

    RA-Eco-RA4E2-64PIN开发板试用+I2c与I3C通信协议的应用。

    。 assign语句得到clk_divide=50,这里的>>2\'d2,是1/4倍频的作用。 else if()的语句是得到clk_cnt=25,这里的clk
    发表于 01-11 15:06

    ads1224使用2M的CLK,为什么DRDY两个脉冲间隔才2MS左右,不是8.32ms?

    我不给SCLK信号。使用2M的CLK,为什么DRDY两个脉冲间隔才2MS左右,不是8.32ms?
    发表于 01-10 09:15

    请问AFE4400为什么要用22位AD转换不用16位?

    AFE4400为什么要用22位AD转换不用16位?除了精度的原因,还有什么别的原因吗?
    发表于 12-24 06:53

    verilog计数器代码为什么要使用这句话if (count===8\'bxxxxxxxx)count=8\'b0000_0000;

    and declarations of other variables used in the file./ always@(posedge clk)//Function realization
    发表于 12-21 14:49

    Verilog 电路仿真常见问题 Verilog 在芯片设计的应用

    。然而,在实际应用,设计师可能会遇到各种问题,这些问题可能会影响仿真的准确性和设计的可靠性。 Verilog电路仿真常见问题 仿真环境的搭建问题 仿真环境的搭建是进行Verilog仿真的第一步。设计师需要选择合适的仿真工具,并
    的头像 发表于 12-17 09:53 1614次阅读

    Verilog 与 ASIC 设计的关系 Verilog 代码优化技巧

    Verilog与ASIC设计的关系 Verilog作为一种硬件描述语言(HDL),在ASIC设计扮演着至关重要的角色。ASIC(Application Specific Integrated
    的头像 发表于 12-17 09:52 1460次阅读

    Verilog 测试平台设计方法 Verilog FPGA开发指南

    Verilog测试平台设计方法是Verilog FPGA开发的重要环节,它用于验证Verilog设计的正确性和性能。以下是一个详细的Verilog
    的头像 发表于 12-17 09:50 1563次阅读

    Verilog与VHDL的比较 Verilog HDL编程技巧

    Verilog 与 VHDL 比较 1. 语法和风格 VerilogVerilog 的语法更接近于 C 语言,对于有 C 语言背景的工程师来说,学习曲线较平缓。它支持结构化编程,代码更直观,易于
    的头像 发表于 12-17 09:44 2703次阅读