努力获取一种内心的平衡

三分频复习

上一篇 / 下一篇  2006-09-19 11:27:31 / 天气: 晴朗 / 心情: 高兴

先用状态机实现占空比1:2的

module div_fsm (clk,rst,div3);
input                clk,rst;
output                div3;
reg                div3;

parameter[1:0]  S0=2'd0,
                S1=2'd1,
                S2=2'd2;

reg[1:0]                state,next_state;

always @ (posedge clk)
begin
        if(!rst) state<=S0;
        else     state<=next_state;
end

always @ (state)
begin
        //default values
        next_state=S0;
        case (state)
                S0: begin
                         next_state=S1;
                         div3=0;
                    end
                   
                S1: begin
                         next_state=S2;
                         div3=0;
                    end
                            
                S2: begin
                         next_state=S0;
                         div3=1;
                    end
                   
                        endcase
end
endmodule

module div_fsm_t;
reg         clk,rst;
wire        div3;

div_fsm U1(clk,rst,div3);

initial begin
        clk=0; rst=0;
        #300   rst=1;
end

always #50 clk=~clk;
endmodule
再贴一个占空比1:1的

module three(reset,clk,clk3);
input clk,reset;
output clk3;
reg a,b;
wire d,e,f,clk3;
assign d=(~a)&(~b);
assign e=clk|~b;
assign f=a|clk3;
assign clk3=e&f;
always @(posedge clk or negedge reset)
begin
if(~reset)
        a<=0;
else
a<=d;
end
always @(posedge clk or negedge reset)
begin
if(~reset)
b<=0;
else
b<=a;
end
endmodule

 

module test_beach;
reg clk;
reg reset;

wire clk3;
three three1(reset,clk,clk3);
always #5 clk=~clk;
initial begin
$monitor($time,,"clk=%b,clk3=%b",clk,clk3);
#5 reset=0;
#5 reset=1;
#10 clk=0;
#300 $finish;
end
endmodule

 

好好研习一下,加油


TAG:

cjyenglish的个人空间 引用 删除 cjyenglish   /   2006-09-21 06:29:25
不用这么复杂的
直接分出两个相差一个上升沿的四分频信号取反再相与就可以得到了
引用 删除 kplin   /   2006-09-20 08:47:45
计数器可能太大了吧?还要加法器
kittenheaven的世界 引用 删除 kittenheav   /   2006-09-19 15:19:44
ho ho ,thanks,只是想用状态机,另外,我想简单实现1:2分频的话,用计数器最简单了吧
引用 删除 kplin   /   2006-09-19 13:35:26
状态转移图
N1,N2,N3为移位寄存器。N1'为N1的下一个状态。
N1        N2        N3        |        N1'
---------------------------------
0        0        0        |        1
1        0        0        |        1
1        1        0        |        0 |循环
0        1        1        |        1 |
1        0        1        |        1 |
1        1        0        |        0 |

化简得N1'=~N2+N3
RTL代码:
reg N1,N2,N3,P1,P2,P3;
always @(negedge clk or negedge rst_)
if(!rst_)
begin
        N1 <= 0;
        N2 <= 0;
        N3 <= 0;
end
else
begin
        N1 <= ~N2 | N3;
        N2 <= N1;
        N3 <= N2;
end
always @(posedge clk or negedge rst_)
if(!rst_)
begin
        P1 <= 0;
        P2 <= 0;
        P3 <= 0;
end
else
begin
        P1 <= ~P2 | P3;
        P2 <= P1;
        P3 <= P2;
end

wire CLK_DIV = N3&3

直观一点,资源和One Hot FSM 一样多,比Binary FSM多2个DFF
引用 删除 kplin   /   2006-09-19 13:11:36
使用简单的卡诺图分析方法就可以实现直接明了的1:2分频,用状态机显得太复杂了。
基本的数字电路分析技术不要忘了。
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-08-26  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 17908
  • 日志数: 109
  • 建立时间: 2006-07-10
  • 更新时间: 2007-07-01

RSS订阅

Open Toolbar