【FPGA每周一练】第四周:用Verilog HDL设计

2019-07-16 00:18发布

先来回答上周的两个问题。问题1       8位循环移位寄存器源代码
  1. module shift
  2.         (
  3.         input                                clk,rstn,
  4.         output        reg        [7:0]                dout
  5.         );
  6. /***************************************/
  7. always@(posedge clk or negedge rstn)
  8.         begin
  9.         if(!rstn)
  10.                 dout[7:0]<=8'b00000001;
  11.         else
  12.                 dout[7:0]<={dout[6:0],dout[7]};
  13.         end
  14. /***************************************/
  15. endmodule


复制代码
对于这个题目,其实主要想让大家了解reg寄存器类型,还有就是练习位拼接符{}。一般的,我们在给模块复位、清零或置数等的时候,会使用异步操作。这样用有什么用呢?就是在复位、清零或置数等的时候是可以独立进行,不受时钟的约束。


问题2D触发器(上升沿触发)源代码如下:(参考)
  1. module d
  2.         (
  3.         input        clk,clr,din,
  4.         output        q;
  5.         );
  6.         reg din,q;
  7. /***************************************/
  8. always@(posedge clk)
  9.         if(clr)
  10.                 q<=0;
  11.         else
  12.                 q<=din;
  13. /***************************************/        
  14. endmodule
复制代码
本周要开始练习时序器件了,那么什么是时序器件?一个时序器件(指触发器或锁存器)就是一个一位存储器。锁存器是电平敏感存储器件,触发器是沿触发存储器件。触发器也被称为寄存器,在程序中体现为对上升沿或下降沿的探测,Verilog 中采用如下方法表示:posedgeclk-------- 上升沿negedgeclk-------- 下降沿 本周题目是:用VerilogHDL设计1、带同步置位、上升沿触发的触发器2、带异步复位和时钟使能、上升沿触发的触发
下周练习预告:分频器设计
往期回顾:【FPGA每周一练】FPGA的HDL建模第三周
【FPGA每周一练】FPGA的HDL建模第二周
【FPGA每周一练】FPGA的HDL建模第一周


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
绝代双骄
1楼-- · 2019-07-16 06:11
回答一个
  1. module DFF(
  2. clk,
  3. d,
  4. set_n,
  5. rst_n,
  6. q
  7. );

  8. input clk;
  9. input d;
  10. input set_n;
  11. input rst_n;
  12. output q;
  13. reg q;

  14. always@(posedge clk or negedge rst_n)
  15. begin
  16.    if(!rst_n)
  17.     q<= 1'b0;
  18.   else if(!set_n)
  19.     q<= 1'b1;
  20. else
  21.    q<=d;
  22. end

  23. endmodule
复制代码


评分

参与人数 1威望 +5 +5 积分 +5 收起 理由 chenchu0910 + 5 + 5 + 5 您的帖子很精彩,期待您分享的下一个帖子!.

查看全部评分

我是棋手
2楼-- · 2019-07-16 09:33
加油啊~!最近没空来,但还是很希望持续更新
三智
3楼-- · 2019-07-16 11:56
  1. //带异步复位和时钟使能、上升沿触发的触发器

  2. module DFF_CK_EN (Data, Clk, Reset, En, Q);
  3.         input Data, Clk, Reset, En;
  4.         output Q;
  5.         parameter U_DLY = 1;
  6.         reg Q;
  7. always @ (posedge Clk or negedge Reset)
  8.         if ( ~Reset)
  9.                 Q <= 1'b0 ;
  10.         else if (En)
  11.                 Q <= #U_DLY Data ;
  12. endmodule
复制代码

评分

参与人数 1威望 +5 +5 积分 +5 收起 理由 chenchu0910 + 5 + 5 + 5 您的帖子很精彩,期待您分享的下一个帖子!.

查看全部评分

三智
4楼-- · 2019-07-16 17:14
  1. //带同步置位、上升沿触发的触发器
  2. module DFF_SYNC_PRE (Data, Clk, Preset, Q);
  3.         input Data, Clk, Preset;
  4.         output Q;
  5.         parameter U_DLY = 1;
  6.         reg Q;
  7. always @ (posedge Clk )
  8.         if ( ~Preset)
  9.                 Q <= #U_DLY 1'b1 ;
  10.         else
  11.                 Q <= #U_DLY Data ;
  12. endmodule
复制代码

评分

参与人数 1威望 +5 +5 积分 +5 收起 理由 chenchu0910 + 5 + 5 + 5 您的帖子很精彩,期待您分享的下一个帖子!.

查看全部评分

天使的名字就是
5楼-- · 2019-07-16 18:37
楼主您好!请问在Verilog钟两个串联的非门(做延时用的)被优化掉了怎么解决啊?可以指点一下吗?谢谢
成长中的原始人
6楼-- · 2019-07-16 22:28
 精彩回答 2  元偷偷看……

一周热门 更多>