微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 急啊!困扰了一个多月的问题,麻烦大家帮帮忙为感!

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

时间:10-02 整理:3721RD 点击:
我想当装态机到达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位地址线
regCAPING;
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

仿真图

初步看了一下,感觉到你的状态机的风格不太好。
此外,从仿真波形上我看到state的波形?所以冲波形上我看不出、你的状态到底跑到哪里了?

那我应该从哪里下手呢?我现在就要求地址总线上出现递增就可以了啊!

问题应该挺简单的,但是你不把state信号dump出来,大家怎么看啊?

我觉得这个状态机本身还是比较简单的,你根据书上的两个always的结构把你的code重新整理一下,
注意阻塞付值和非阻塞复制,
以你现在的code,很可能仿真想办法调通了,到编译的时候又出问题了。
Good coding style leads to Good Design.
赫赫,愚人之见了。

写状态机就得学学7楼的风格

代码写的的确不是很清楚,可能是阻塞、非阻塞的问题

问题解决了吗?还在试.......

代码风格的问题

给位都是高手阿,学习了

是不是说,state要用非阻塞赋值,逻辑控制信号和输出信号用阻塞赋值来写,这样一般就没有问题了?

case结构下的每个状态里的 if else 语句都木有描述完整。
代码风格确实差了点。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top