Fourier00 发表于 2009-9-11 18:49

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

本帖最后由 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);
inputclk,rst_n;
output div3;
reg    div3;
parameter S0=2'd0,
               S1=2'd1,
               S2=2'd2;
reg current_state;
reg 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

Fourier00 发表于 2009-9-20 21:29

//三段式状态机三分频(占空比1/3)实现
//代码如下:
module div_fsm3(clk,rst_n,div3);
inputclk,rst_n;
output div3;
reg    div3;
parameter S0=2'd0,
               S1=2'd1,
               S2=2'd2;
...
lcq5070 发表于 2009-9-20 20:54 https://bbs.21ic.com/images/common/back.gif

再努力一下,可以写成占空比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分频,发了个图片在上面方便大家看得更清楚,
有什么问题大家可以指出
页: [1] 2 3 4 5 6 7 8
查看完整版本: 数字设计&verilog 每周一练(一 二)