【FPGA/verilog -入门学习2】verilog 生成上升沿下降沿脉冲

这篇具有很好参考价值的文章主要介绍了【FPGA/verilog -入门学习2】verilog 生成上升沿下降沿脉冲。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求1:使用脉冲边沿检测法设计一个上下降沿检测功能

使用脉冲边沿检测法设计一个上下降沿检测功能

【FPGA/verilog -入门学习2】verilog 生成上升沿下降沿脉冲,verilog &FPGA,fpga开发

1,使用clk 脉冲来临时pluse 移位赋值

preg1 <=pluse

preg2<=preg2

preg1 比pluse 晚一个时钟,

preg2比preg1晚一个时钟

在利用 与/非指令合并,生成上升沿的一个脉冲的

r_pluse <= {r_pluse[0],pulse}; //等效于

r_pluse[0] <=pluse

r_pluse[1] <=r_pluse[1]

2,代码实现

vlg_design

/
/*
使用脉冲边沿检测法设计一个上下降沿检测功能
 */
/
`timescale 1ns/1ps
module vlg_design(
    input clk,//100M
    input pulse,// 
    input rest_n,
    output  o_pulse_pos, //输出pluse 的上升沿脉冲
    output  o_pulse_nes  //输出pluse 的下降沿脉冲
    );
    

reg [1:0] r_pluse;
 
 //产生1s的计数
 always @(posedge clk) begin
    if(!rest_n) r_pluse <='b00;
    else  r_pluse <= {r_pluse[0],pulse};
 end 

assign  o_pulse_pos = r_pluse[0] & ~r_pluse[1];
assign  o_pulse_nes = r_pluse[1] & ~r_pluse[0];

endmodule

testbench_top


`timescale 1ns/1ps
module testbench_top();
    

//参数定义

`define CLK_PERIORD        10        //时钟周期设置为10ns(100MHz)    


//接口申明
    
reg clk;
reg pulse;
reg rest_n;
wire o_pulse_pos;
wire o_pulse_nes;
 
 
    
vlg_design        uut_vlg_design(
    .clk(clk),
    .pulse(pulse),
    .rest_n(rest_n),
    .o_pulse_pos(o_pulse_pos),
    .o_pulse_nes(o_pulse_nes)
    );    
    
//时钟和复位初始化、复位产生 
initial begin
clk <= 0;
rest_n <= 0;
#10;
rest_n <= 1;
clk <= 1;
pulse <= 1'b0; 

end

//时钟产生
always #(`CLK_PERIORD/2) clk = ~clk;    

    
 
//测试激励产生
initial begin

    @(posedge rest_n);    //等待复位完成
    @(posedge clk);
    pulse <= 1'b0;
    repeat(10) @(posedge clk);
    pulse <= 1'b1;
    
    
    repeat(30) @(posedge clk);
    pulse <= 1'b0;
    repeat(10) @(posedge clk);
    
    $stop;
end

endmodule

3,仿真效果

【FPGA/verilog -入门学习2】verilog 生成上升沿下降沿脉冲,verilog &amp;FPGA,fpga开发

需求2:使用脉冲边沿检测法设计一个双沿检测功能

/
/*
使用脉冲边沿检测法设计一个上下降沿检测功能
 
 */
/
`timescale 1ns/1ps
module vlg_design(
    input clk,//100M
    input pulse,// 
    input rest_n,
    output  o_pulse_pos, //输出pluse 的上升沿脉冲
    output  o_pulse_nes , //输出pluse 的下降沿脉冲
    output  o_pulse_both  //输出pluse 的上升下降沿脉冲
    );
    

reg [1:0] r_pluse;
 
 //产生1s的计数
 always @(posedge clk) begin
    if(!rest_n) r_pluse <='b00;
    else  r_pluse <= {r_pluse[0],pulse};
 end 

assign  o_pulse_pos = r_pluse[0] & ~r_pluse[1];
assign  o_pulse_nes = r_pluse[1] & ~r_pluse[0];
assign o_pulse_both = o_pulse_pos | o_pulse_nes;
endmodule


`timescale 1ns/1ps
module testbench_top();
    

//参数定义

`define CLK_PERIORD        10        //时钟周期设置为10ns(100MHz)    


//接口申明
    
reg clk;
reg pulse;
reg rest_n;
wire o_pulse_pos;
wire o_pulse_nes;
wire o_pulse_both;
 
    
vlg_design        uut_vlg_design(
    .clk(clk),
    .pulse(pulse),
    .rest_n(rest_n),
    .o_pulse_pos(o_pulse_pos),
    .o_pulse_nes(o_pulse_nes),
    .o_pulse_both(o_pulse_both)
    );    
    
//时钟和复位初始化、复位产生 
initial begin
clk <= 0;
rest_n <= 0;
#10;
rest_n <= 1;
clk <= 1;
pulse <= 1'b0; 

end

//时钟产生
always #(`CLK_PERIORD/2) clk = ~clk;    

    
 
//测试激励产生
initial begin

    @(posedge rest_n);    //等待复位完成
    @(posedge clk);
    pulse <= 1'b0;
    repeat(10) @(posedge clk);
    pulse <= 1'b1;
    
    
    repeat(30) @(posedge clk);
    pulse <= 1'b0;
    repeat(10) @(posedge clk);
    
    $stop;
end

endmodule

【FPGA/verilog -入门学习2】verilog 生成上升沿下降沿脉冲,verilog &amp;FPGA,fpga开发

3思考:FPGA并行性

【FPGA/verilog -入门学习2】verilog 生成上升沿下降沿脉冲,verilog &amp;FPGA,fpga开发

【FPGA/verilog -入门学习2】verilog 生成上升沿下降沿脉冲,verilog &amp;FPGA,fpga开发

3次测试中,测试1,测试2 ,实现了和r_pluse <= {r_pluse[0],pulse}; 同样的效果。

测试3中,体现了expriment1/expriment2 赋值的并行性

测试1,2 其实也是并行的,

【FPGA/verilog -入门学习2】verilog 生成上升沿下降沿脉冲,verilog &amp;FPGA,fpga开发

第二条语句中的test2 赋值和第一条语句的test1 同时赋值,此时的test1还未被改变。故时序上出现了移位的效果

4,脉冲边沿检测的适用场景

STAR FPGA开发板的按键消抖的按键检测(at7_ex07)

【FPGA/verilog -入门学习2】verilog 生成上升沿下降沿脉冲,verilog &amp;FPGA,fpga开发

频率计数

STAR FPGA开发板的超声波回响脉冲的高电平时间计数 (at7_ex11)

【FPGA/verilog -入门学习2】verilog 生成上升沿下降沿脉冲,verilog &amp;FPGA,fpga开发文章来源地址https://www.toymoban.com/news/detail-759685.html

到了这里,关于【FPGA/verilog -入门学习2】verilog 生成上升沿下降沿脉冲的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 边沿检测(上升沿检测、下降沿检测、双边沿检测|verilog代码|Testbench|RTL电路图|仿真结果)

    数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字I

    2024年02月11日
    浏览(40)
  • 深度学习过程中测试准确率先上升后下降是为什么?

    很典型的过拟合问题。 在训练过程中的验证准确率前上升,后下降,即在验证集上的表现先好后差。 数据相对模型来说比较简单,即模型的表达能力过剩。在初始训练阶段,模型逐渐开始学习到一些信息,因而在验证集上的表现是提升的,在到达某一点后,模型接着训练则

    2024年02月11日
    浏览(36)
  • 【FPGA】Verilog:时序电路 | 触发器电路 | 上升沿触发 | 同步置位 | 异步置位

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:触发器电路    ​ 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用IO:Sw

    2024年02月11日
    浏览(38)
  • 【FPGA/verilog -入门学习10】verilog 查表法实现正弦波形发生器

    用查找表设计实现一个正弦波形发生器 寻址的位宽是10位,数据量是1024个,输出的数据是16位 数据量是1024个: x = linspace(0,2*pi,1024) 输出数据是16位: y范围:0~2^16 -1 = 0~65535 y =( sin(x)+1)*65535/2 寻址的位宽是10位 输入是0~1023 1023 占用10位 操作步骤 1,使用matlab 生成数据,制作

    2024年02月05日
    浏览(65)
  • 【FPGA/verilog -入门学习5】verilog中的genrate for 和for 以及数组的用法

    本文参考:verilog generate语法总结-CSDN博客 Verilog数组赋值_笔记大全_设计学院 在Verilog中, generate for 和 for 都是用于循环的结构,但是它们具有不同的应用场合和语义。 for 循环: for 循环主要用于行为描述(behavioral description),通常用于描述算法或数学运算。 for 循环在仿真

    2024年02月03日
    浏览(46)
  • 【FPGA/verilog -入门学习1】verlog中的BUFGCE,BUFGMUX原语

    参考:(详解)BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用 - 知乎 FPGA资源介绍——时钟资源(二)_fpga时钟资源-CSDN博客 是 带有时钟使能端的全局缓冲 。它有一个输入I、一个使能端CE和一个输出端O。只有当BUFGCE的使能端CE有效(高电平)时,BUFGCE才有输出。 对比发现:使用自己产生

    2024年02月21日
    浏览(52)
  • 【FPGA/verilog -入门学习11】verilogTestbench中的文本文件写入,读出,打印等操作

    本文参考:Verilog中的系统任务(显示/打印类)--$display, $write,$strobe,$monitor-CSDN博客 Verilog:parameter、localparam的区别和用法-CSDN博客 Verilog的系统任务----$fopen、$fclose和$fdisplay, $fwrite,$fstrobe,$fmonitor_verilog fopen-CSDN博客 Verilog的系统任务----$readmemh和$readmemb-CSDN博客 $display可以

    2024年02月03日
    浏览(43)
  • FPGA/Verilog HDL/AC620零基础入门学习——第一个项目按键控制LED

    最近要考试了,所以我赶紧补习FPGA,我们用的是小梅哥的AC620开发板,软件是Quartus。推荐看这个视频教程:零基础轻松学习FPGA,小梅哥FPGA设计思想与验证方法视频教程 用按键控制LED灯的亮灭就是一个二选一多路器,两个IO,a、b,可以是高电平,也可以是低电平。 输入按键

    2024年02月05日
    浏览(51)
  • STM32CUBEMX配置 定时器中断 和 上升沿中断(实现检测1s以内的脉冲个数)

    ———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子,使用STM32CUBEMX做了很多驱动,包括ADC、UART、RS485、EEPROM(IIC)、FLASH(SPI)等等。

    2024年02月16日
    浏览(36)
  • ChatGPT帮助提升工作效率和质量:完成时间下降40%,质量评分上升 18%

      自ChatGPT去年11月发布以来,人们就开始使用它来协助工作,热心的用户利用它帮助撰写各种内容,从宣传材料到沟通话术再到调研报告。    两名MIT经济学研究生近日在《科学》杂志上发表的一项新研究表明,ChatGPT可能有助于减少员工之间的写作能力差距。研究发现,它可

    2024年02月11日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包