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
    +关注

    关注

    31

    文章

    1374

    浏览量

    114730
  • 触发器
    +关注

    关注

    14

    文章

    2065

    浏览量

    63567
  • 上升沿
    +关注

    关注

    0

    文章

    3

    浏览量

    1914

原文标题:Verilog学习笔记

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Verilog HDL语法学习笔记

    Verilog HDL 语 言 最 初 是 作为 Gateway Design Automation 公 司 ( Gateway DesignAutomation 公司后来被著名的 Cadence Design Systems 公司收购)模拟器产品开发的硬件建模语言。
    的头像 发表于 03-04 15:04 5803次阅读
    <b class='flag-5'>Verilog</b> HDL语法学习笔记

    RK平台时钟(CLK)开发:核心知识+调试步骤+问题汇总

    在 RK(瑞芯微)平台开发,时钟(CLK)子系统是 SOC 的 “心脏”——CPU 变频、DDR 数据传输、以太网通信、LCD 显示等所有组件的稳定运行,都依赖精准的时钟信号。但时钟树复杂、配置参数多、调试踩坑频繁,一直是开发者的痛点。
    的头像 发表于 02-05 13:49 3175次阅读
    RK平台时钟(<b class='flag-5'>CLK</b>)开发:核心知识+调试步骤+问题汇总

    FPV光端机解决方案,主控为何越来越多的选择用 AG32 (MCU+FPGA)?

    @(posedge ahb_clock or negedge ahb_resetn) beginif (lahb_resetn) beginhaddr_reg <= 32\'h0
    发表于 01-28 14:29

    请问,不用的型号,读写速率是5ms或者4ms,时钟都是1MHZ,是因为什么原因决定的?

    请问,不用的型号,读写速率是5ms或者4ms,时钟都是1MHZ,是因为什么原因决定的?
    发表于 01-16 06:19

    verilog testbench运行测试用例时,运行到make run_test出错怎么解决?

    按照胡老师书上的在verilog testbench运行测试用例时,在运行到make run_test步骤时出错,查了很多方案没有解决。
    发表于 11-11 06:52

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

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

    使用NucleiStudio生成tb仿真需要的.verilog文件

    打开仿真顶层文件tb_top.v,存放在ITCM模块里面的指令是通过readmemh函数读入.verilog文件实现的: 下面通过对NucleiStudio IDE进行设置,实现将c
    发表于 11-05 07:07

    蜂鸟E203移植到FPGA开发板前的IP核例化工作

    @(posedge CLK50MHZ or negedge rst_n) if(!rst_n) begin cnt&lt;= 11'd0; clk
    发表于 10-27 07:35

    在利用Xilinx开发板烧录E203V2软件程序,无MCU下载器时利用FPGA Jtag下载器烧录软件程序

    ;always @(posedge clk)begin if (ren) beginaddr_r <= addr; endendgeneratefor (i = 0; i <
    发表于 10-24 13:12

    DMA硬件实现——读写实现

    ) wp_addr &lt;= 0;//rpalways@(posedge clk or negedge rst_n)if(!rst_n) rp_addr &lt;= 0
    发表于 10-24 07:58

    当ICE_DAT和ICE_CLK引脚配置为应用编码的备用功能时,是否会导致编程失败?

    当ICE_DAT和ICE_CLK引脚配置为应用编码的备用功能时,是否会导致编程失败
    发表于 08-21 06:30

    【高云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模块的调用、任务和函数

    在做模块划分时,通常会出现这种情形,某个大的模块包含了一个或多个功能子模块,verilog是通过模块调用或称为模块实例化的方式来实现这些子模块与高层模块的连接的.
    的头像 发表于 05-03 10:29 1758次阅读
    <b class='flag-5'>verilog</b>模块的调用、任务和函数