数字设计&verilog 每周一练(一 二)

[复制链接]
 楼主| Fourier00 发表于 2009-9-11 18:49 | 显示全部楼层 |阅读模式
本帖最后由 Fourier00 于 2009-9-20 21:43 编辑

最近这边有点冷清啊,还有就是针对很多出学者不知道怎么学习fpga,想推出“数字设计&verilog 每周一练”这个栏目,主要针对初学者,当然初学者更需要高手点点拨,有高手点拨大家才能更快成长吗,暂时先定在每周五晚上发帖出练习题,题目都是一些数字电路基础,以及verilog实现,当然越到后面题目的难度会增加,让新手成阶梯成长,到最后说不定我们也能搞出一个diy出来玩玩。
  练习主要集中在数字电路设计 verilog 可能会有一些工具使用或者是器件知识,还可能会有一些算法的讨论,当然大家有好的点子和想法可以推荐给我,我会汇总起来发给大家讨论,欢迎大家捧场。
   废话也不多说了,这周来三道题,欢迎大家讨论,当然是方法是越多越好,我还是推荐画电路,但是verilog当然也可以,呵呵,数字电路是基础,我们先扎好马步在练功。
   这几个老手可能会比较面熟,欢迎大家啊踊跃讨论,方法越多越好啊,不过考虑到fpga有资源的限制,当然资源也很重要啊。
  (一)
   1  用电路或者verilog描述一个 2 分频 3 分频 4 分频。
   2  用电路或者verilog 描述一个检测上升沿和检测下降沿的。
   3  用电路或者verilog 描述一个pwm电路,占空比0%~100%。

    (二)
   1 什么是同步设计什么是异步设计,同步设计相对异步设计有什么好处。
   2 用verilog设计一个同步复位计数器,用verilog设计一个异步复位计数器 (模 10),描述一下有什么区别,从电路和代码两个方面。
   3 写出一个1bit加法器和1bit减法器。
yanzhe127 发表于 2009-9-11 22:46 | 显示全部楼层
支持LZ这种诲人不倦的精神~
 楼主| Fourier00 发表于 2009-9-12 23:07 | 显示全部楼层
好像没有人感兴趣啊,是不是太简单了,没有人愿意写一下啊......
patrick007 发表于 2009-9-15 00:38 | 显示全部楼层
你这个不错,支持一下。
rd_me 发表于 2009-9-15 07:58 | 显示全部楼层
不错
rd_me 发表于 2009-9-15 07:58 | 显示全部楼层
支持
role_2099 发表于 2009-9-17 11:43 | 显示全部楼层
强烈支持!我真的一道题也不会怎么办啊?
Tom2007 发表于 2009-9-18 21:50 | 显示全部楼层
支持 支持 支持!!
Tom2007 发表于 2009-9-18 21:51 | 显示全部楼层
非常支持
Tom2007 发表于 2009-9-20 13:31 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
Tom2007 发表于 2009-9-20 13:36 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
Tom2007 发表于 2009-9-20 15:53 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
lcq5070 发表于 2009-9-20 20:17 | 显示全部楼层
支持
lcq5070 发表于 2009-9-20 20:54 | 显示全部楼层
本帖最后由 lcq5070 于 2009-9-20 21:08 编辑

//三段式状态机三分频(占空比1/3)实现
//代码如下:
module div_fsm3(clk,rst_n,div3);
input  clk,rst_n;
output div3;
reg    div3;
parameter[1:0] S0=2'd0,
               S1=2'd1,
               S2=2'd2;
reg[1:0] current_state;
reg[1:0] next_state;
//第一个进程,同步时序always模块,格式化描述次态寄存器迁移到现态寄存器
always @ (posedge clk or negedge rst_n)  //异步复位
begin
       if(!rst_n)
           current_state <= S0;
       else
           current_state <= next_state; //注意,使用的是非阻塞赋值
  end
//第二个进程,组合逻辑always模块,描述状态转移条件判断
always @ (current_state)   //电平触发
begin
     next_state = S0;  //要初始化,使得系统复位后能进入正确的状态
     case(current_state)
         S0:begin
              next_state=S1;
            end
         S1:begin
              next_state=S2;
            end
         S2:begin
              next_state=S0;
            end
      endcase
  end
//第三个进程,同步时序always模块,格式化描述次态寄存器输出
always @ (posedge clk)
  begin
     case(next_state)
        S0:div3 <= 1'b0;  //注意是非阻塞逻辑
        S1:div3 <= 1'b0;
        S2:div3 <= 1'b1;
     default:div3 <= 0;
     endcase
  end
endmodule
 楼主| Fourier00 发表于 2009-9-20 20:54 | 显示全部楼层
12 楼,4分频用的是行波计数器,可以试着换个方法,如果要遵循同步设计的话,最好两个触发器都在同一个时钟下面工作。
lcq5070 发表于 2009-9-20 20:59 | 显示全部楼层
[img][/img]
 楼主| Fourier00 发表于 2009-9-20 21:29 | 显示全部楼层
//三段式状态机三分频(占空比1/3)实现
//代码如下:
module div_fsm3(clk,rst_n,div3);
input  clk,rst_n;
output div3;
reg    div3;
parameter[1:0] S0=2'd0,
               S1=2'd1,
               S2=2'd2;
...
lcq5070 发表于 2009-9-20 20:54


再努力一下,可以写成占空比1:1 哦,呵呵
lover9 发表于 2009-9-21 11:59 | 显示全部楼层
顶,还不懂哦
lover9 发表于 2009-9-21 12:00 | 显示全部楼层
顶,还不懂哦
 楼主| Fourier00 发表于 2009-9-21 21:28 | 显示全部楼层
本帖最后由 Fourier00 于 2009-9-21 21:43 编辑

写了一下 2分频 3分频 和4分频,发了个图片在上面方便大家看得更清楚,
有什么问题大家可以指出

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Where Is The Laputa

14

主题

516

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部