打印

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

[复制链接]
149660|156
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
你这个不错,支持一下。

使用特权

评论回复
5
rd_me| | 2009-9-15 07:58 | 只看该作者
不错

使用特权

评论回复
6
rd_me| | 2009-9-15 07:58 | 只看该作者
支持

使用特权

评论回复
7
role_2099| | 2009-9-17 11:43 | 只看该作者
强烈支持!我真的一道题也不会怎么办啊?

使用特权

评论回复
8
Tom2007| | 2009-9-18 21:50 | 只看该作者
支持 支持 支持!!

使用特权

评论回复
9
Tom2007| | 2009-9-18 21:51 | 只看该作者
非常支持

使用特权

评论回复
10
Tom2007| | 2009-9-20 13:31 | 只看该作者

使用特权

评论回复
11
Tom2007| | 2009-9-20 13:36 | 只看该作者

使用特权

评论回复
12
Tom2007| | 2009-9-20 15:53 | 只看该作者

使用特权

评论回复
13
lcq5070| | 2009-9-20 20:17 | 只看该作者
支持

使用特权

评论回复
14
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

使用特权

评论回复
15
Fourier00|  楼主 | 2009-9-20 20:54 | 只看该作者
12 楼,4分频用的是行波计数器,可以试着换个方法,如果要遵循同步设计的话,最好两个触发器都在同一个时钟下面工作。

使用特权

评论回复
16
lcq5070| | 2009-9-20 20:59 | 只看该作者
[img][/img]

使用特权

评论回复
17
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 哦,呵呵

使用特权

评论回复
18
lover9| | 2009-9-21 11:59 | 只看该作者
顶,还不懂哦

使用特权

评论回复
19
lover9| | 2009-9-21 12:00 | 只看该作者
顶,还不懂哦

使用特权

评论回复
20
Fourier00|  楼主 | 2009-9-21 21:28 | 只看该作者
本帖最后由 Fourier00 于 2009-9-21 21:43 编辑

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

div2.GIF (3.89 KB )

div2.GIF

div3.GIF (10.06 KB )

div3.GIF

div4.GIF (9.24 KB )

div4.GIF

wave.GIF (7.56 KB )

wave.GIF

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Where Is The Laputa

14

主题

516

帖子

2

粉丝