搜索
bottom↓
回复: 4

求助 verilog 分频程序 ,望高手指点,急急急啊·~~~~谢谢啦

[复制链接]

出0入0汤圆

发表于 2010-11-18 19:01:56 | 显示全部楼层 |阅读模式
module dddd(clk_in,clr,key,L1,L2);
input clk_in,key,clr;
output L1,L2;
reg L1,L2;
reg[7:0] q;


reg state;
always @(posedge clk_in )
        if(!clr)
        begin

                q=0;
                L1=1;
                L2=1;
                state=1;
        end
       
        else
        case(state)
        1'b0:
                begin
                        L1=0;
                        L2=1;
                        if(q<8'd40)                         
                        begin
                                if(led_ctrl)
                                 state=1'b1;
                                else
                                q=q+1;
                        end

                        else
                        begin  
                                q=0;
                                L1=~L1;
                                L2=~L2;
                        end
                       
                end
        1'b1:
                begin
                        L1=1;
                        L2=1;
                        q=0;
                        if(led_ctrl)
                                state=1'b0;
                        else
                                state=1'b1;

                end
        endcase

//------------------------------------------------------
  reg [3:0]  cnt;      //计数寄存器
  always @ (posedge clk_in)
    if (!clr)           //异步复位
      cnt <= 4'd0;
    else
      cnt <= cnt + 1'b1;
  reg   low_sw;
always @(posedge clk_in)
    if (!clr)
      low_sw <= 1'b1;
    else if (cnt == 4'd10)  //满20ms,将按键值锁存到寄存器low_sw中
      low_sw <= key;   

  // ---------------------------------------------------------------------------
  reg   low_sw_r;       //每个时钟周期的上升沿将low_sw信号锁存到low_sw_r中
  always @ ( posedge clk_in)
    if (!clr)
      low_sw_r <= 1'b1;
    else
      low_sw_r <= low_sw;
         //当寄存器low_sw由1变为0时,led_ctrl的值变为高,维持一个时钟周期
  wire  led_ctrl = low_sw_r & ( ~low_sw);

//---------------------------------------------------------------------       
       
       
endmodule

键盘扫描参照网上的,为了看仿真波形循环写小了点




设计要求是这样 (原文件名:QQ截图未命名.png)


我程序得到的波形,跟要求的为什么不一样 (原文件名:QQ截图未命名是.png)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-11-19 18:37:43 | 显示全部楼层
问题是 你想问什么??给你改错?

出0入0汤圆

发表于 2010-11-19 18:49:46 | 显示全部楼层
……

出0入0汤圆

发表于 2010-11-19 19:31:55 | 显示全部楼层
看了半天 觉得很乱
case(state)
1'b0:
begin
L1=0;
L2=1;
if(q<8'd40)   
begin  
if(led_ctrl)
state=1'b1;
else
q=q+1;  
end

else  
begin   
q=0;
L1=~L1;
L2=~L2;
end
这有问题
你把 L1=0;L2=1;放在always 内部state=0时每次都重置,L1 L2刚刚取反还没等q自增至8'd40 又被重置 这就是为什么你的脉宽那么窄的原因 时间只有一个脉冲的间隔!
  在led_ctrl置1时对于state=0和stae=1分别对应两种不同结果state=1'b0;和state=1'b0; 什么意思?互换??
我有点糊涂,程序怎么会这么复杂……

出0入0汤圆

发表于 2010-11-19 19:33:54 | 显示全部楼层
在led_ctrl置1时对于state=0和stae=1分别对应两种不同结果state=1'b1;和state=1'b0;
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 17:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表