在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3831|回复: 14

急啊!困扰了一个多月的问题,麻烦大家帮帮忙为感!!

[复制链接]
发表于 2006-9-22 16:29:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我想当装态机到达startcaping状态时开始让地址线增一,但是仿真却不行!!麻烦各位给看看啊!急啊,兜一个月了!!!!再搞不定就...唉!!

`timescale 1ns/100ps
module capcard (we,nrd,addressbus,reset,CAPING,CAPSTR,ICLK,IDQ,IGPV,IGPH);
input CAPSTR,ICLK,IDQ,IGPH,IGPV,nrd,reset;
output CAPING,we;
output [17:0] addressbus;
reg we;
reg [17:0] addressbus;//18位地址线
reg        CAPING;
reg [2:0] state;
parameter         idle=3'b000,                startflag=3'b001,        //状态机
        wait_vstart =3'b010,        wait_vend =3'b011,
        wait_hstart =3'b100,        wait_hend=3'b101,
        startcaping=3'b110;

initial
begin
        addressbus<=18'b00_0000_0000_0000_0000;//复位
        we=1;
        CAPING=1;
        state=idle;
end
always @ (posedge ICLK)
begin
        if(!reset)begin
                we<=1;
                CAPING<=1;
                state<=idle;
                end
        else
                               case(state)
                idle:
                if(!CAPSTR)
                        state<=startflag;

                startflag:
                        if(!IGPV)begin
                                state<=wait_vstart;
                        end                                       
                wait_vstart:
                        if(IGPV)begin
                                state<=wait_vend;
                                end
                wait_vend:
                        if(!IGPH)begin
                                state<=wait_hstart;
                                end
                wait_hstart:
                        if(IGPH)begin
                                state<=wait_hend;
                                end                                       
                wait_hend:
                        if(IDQ)begin
                                state<=startcaping;
                                        end
                startcaping:begin
                        addressbus=addressbus+1;
                        we<=0;
                        CAPING<=0;
                        if(!IGPV)state<=idle;
                        else state=startcaping;
                        end
        default :        state<=idle;
                endcase
end
endmodule

仿真图

仿真图
发表于 2006-9-22 18:01:31 | 显示全部楼层
初步看了一下,感觉到你的状态机的风格不太好。
此外,从仿真波形上我看到state的波形?所以冲波形上我看不出、你的状态到底跑到哪里了?
 楼主| 发表于 2006-9-22 18:27:40 | 显示全部楼层
那我应该从哪里下手呢?我现在就要求地址总线上出现递增就可以了啊!
发表于 2006-9-22 19:14:01 | 显示全部楼层
问题应该挺简单的,但是你不把state信号dump出来,大家怎么看啊?
发表于 2006-9-23 17:44:47 | 显示全部楼层
我觉得这个状态机本身还是比较简单的,你根据书上的两个always的结构把你的code重新整理一下,
注意阻塞付值和非阻塞复制,
以你现在的code,很可能仿真想办法调通了,到编译的时候又出问题了。
Good coding style leads to Good Design.
赫赫,愚人之见了。
头像被屏蔽
发表于 2006-12-9 14:38:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2006-12-12 19:33:23 | 显示全部楼层

回复 #1 51video 的帖子

楼主怎么用initial语句来赋值啊,
建议换一下这种状态机:

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

always @(<input> )
begin
<output>=<idle>;
case(state)
S_1: if
......
default:
endcase

end
发表于 2006-12-12 23:19:15 | 显示全部楼层
写状态机就得学学7楼的风格
发表于 2006-12-13 20:16:46 | 显示全部楼层
代码写的的确不是很清楚,可能是阻塞、非阻塞的问题
发表于 2006-12-13 23:09:54 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 21:47 , Processed in 0.067252 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表