数字设计&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减法器。
支持LZ这种诲人不倦的精神~ 好像没有人感兴趣啊,是不是太简单了,没有人愿意写一下啊...... 你这个不错,支持一下。 不错 支持 强烈支持!我真的一道题也不会怎么办啊? 支持 支持 支持!! 非常支持 支持 本帖最后由 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 12 楼,4分频用的是行波计数器,可以试着换个方法,如果要遵循同步设计的话,最好两个触发器都在同一个时钟下面工作。 //三段式状态机三分频(占空比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 哦,呵呵 顶,还不懂哦 顶,还不懂哦 本帖最后由 Fourier00 于 2009-9-21 21:43 编辑
写了一下 2分频 3分频 和4分频,发了个图片在上面方便大家看得更清楚,
有什么问题大家可以指出