parameter是定义常量的吧?那么在仿真的过程中应该以常量存在呀?
但是我定义的parameter在仿真中却是以signal的状态存在的,而且还提示我说
那些定义的parameter和上层端口没有连接,不知道什么原因?
提示的错误是 SOCK_UDP_ARP has no loads or drivers
……
有人遇到过么?还请大牛们解答!!
module state(clk,rst_N,COMMAND,TCPSIGN,PROTOCOL,timeout_a,timeout_p,timeout_t,CHANNELSTATE);
input clk;
input rst_N;
input[7:0] COMMAND;
input[7:0] TCPSIGN;
input[7:0] PROTOCOL;
input timeout_a;
input timeout_p;
input timeout_t;
output[7:0] CHANNELSTATE;
reg[7:0] CHANNELSTATE;
reg[7:0] NEXTSTATE;
parameter[7:0] SOCK_ARP=8'b00000001,
SOCK_SYNSEND=8'b00000011,
SOCK_SYNSEND_ACK=8'b00000100,
SOCK_SYNREV=8'b00000101,
SOCK_ESTABLISHED=8'b00000110,
SOCK_RESET=8'b00001101,
SOCK_INIT=8'b00001110,
SOCK_UDP_DATA=8'b00011100,
SOCK_UDP_ARP=8'b00011101,
CLOSED=8'b0,
SOCK_CLOSE_WAIT=8'b00000111,
SOCK_LAST_ACK=8'b00001000,
SOCK_FIN_WAIT1=8'b00001001,
SOCK_FIN_WAIT2=8'b00001010,
SOCK_CLOSING=8'b00001011,
SOCK_REV_ARP=8'b00011101,
SOCK_TIME_WAIT=8'b00001100;
[email=always@(posedge]always@(posedge[/email] clk or negedge rst_N) begin
if(!rst_N) CHANNELSTATE<=SOCK_RESET;
else CHANNELSTATE<=NEXTSTATE;
end
[email=always@(COMMAND]always@(COMMAND[/email] or TCPSIGN or PROTOCOL or timeout_a or timeout_p or timeout_t) begin
case(CHANNELSTATE)
SOCK_RESET: if(COMMAND==8'b00000010) NEXTSTATE=SOCK_INIT;
else if(TCPSIGN==8'b01000000) NEXTSTATE=SOCK_REV_ARP;
else NEXTSTATE=SOCK_RESET;
SOCK_INIT: if(PROTOCOL==8'b00000010) NEXTSTATE=SOCK_UDP_ARP;
else if(PROTOCOL==8'b00000001) NEXTSTATE=SOCK_ARP;
else NEXTSTATE=SOCK_INIT;
SOCK_REV_ARP: if(TCPSIGN==8'b10000000) NEXTSTATE=SOCK_UDP_DATA; //RECEIVE UDP FRAME
else if(TCPSIGN==8'b00010000) NEXTSTATE=SOCK_SYNREV;
else if(timeout_p==1'b1) NEXTSTATE=SOCK_RESET;
else NEXTSTATE=SOCK_REV_ARP;
SOCK_UDP_ARP: if(TCPSIGN==8'b01000000) NEXTSTATE=SOCK_UDP_DATA;
else if(timeout_a==1'b1) NEXTSTATE=SOCK_RESET;
else NEXTSTATE=SOCK_UDP_ARP;
SOCK_ARP: if(COMMAND==8'b00000100) begin
NEXTSTATE=SOCK_SYNSEND;
end
else if(timeout_a==1'b1) NEXTSTATE=SOCK_RESET;
else NEXTSTATE=SOCK_ARP;
SOCK_UDP_DATA: if(COMMAND==8'b00010000) NEXTSTATE=CLOSED;
else if(timeout_t==1) NEXTSTATE=CLOSED;
else NEXTSTATE=SOCK_UDP_DATA;
SOCK_SYNSEND: if(TCPSIGN==8'b00000010) begin //need to modify
NEXTSTATE=SOCK_SYNSEND_ACK;
end
else if(timeout_a==1'b1) NEXTSTATE=SOCK_RESET;
SOCK_SYNSEND_ACK: if(timeout_a==1'b1) NEXTSTATE=SOCK_RESET;
else NEXTSTATE=SOCK_ESTABLISHED;
SOCK_SYNREV: if(TCPSIGN==8'b00000010) NEXTSTATE=SOCK_ESTABLISHED;
else if(timeout_p==1'b1) NEXTSTATE=SOCK_RESET;
else NEXTSTATE=SOCK_SYNREV;
SOCK_ESTABLISHED: if(TCPSIGN==8'b00100000) NEXTSTATE=SOCK_CLOSE_WAIT;
else if(COMMAND==8'b0001000) NEXTSTATE=SOCK_FIN_WAIT1;
else NEXTSTATE=SOCK_ESTABLISHED;
SOCK_CLOSE_WAIT: NEXTSTATE=SOCK_LAST_ACK;
SOCK_LAST_ACK: if(TCPSIGN==8'b00000010) NEXTSTATE=CLOSED;
else if(timeout_t==1'b1) NEXTSTATE=CLOSED;
else NEXTSTATE=SOCK_LAST_ACK;
SOCK_FIN_WAIT1: if(TCPSIGN==8'b00000010) NEXTSTATE=SOCK_FIN_WAIT2;
else if(TCPSIGN==8'b00100000) begin
NEXTSTATE=SOCK_CLOSING;
end
else if(timeout_t==1'b1) NEXTSTATE=CLOSED;
else NEXTSTATE=SOCK_FIN_WAIT1;
SOCK_FIN_WAIT2: if(TCPSIGN==8'b00100000) begin
NEXTSTATE=SOCK_TIME_WAIT;
end
else if(timeout_t==1'b1) NEXTSTATE=CLOSED;
else NEXTSTATE=SOCK_FIN_WAIT2;
SOCK_CLOSING:
if(TCPSIGN==8'b00000010) begin
NEXTSTATE=SOCK_TIME_WAIT;
end
else if(timeout_t==1'b1) NEXTSTATE=CLOSED;
else NEXTSTATE=SOCK_CLOSING;
SOCK_TIME_WAIT: if(timeout_t==1'b1) begin
NEXTSTATE=CLOSED;
end
else NEXTSTATE=SOCK_TIME_WAIT;
CLOSED: NEXTSTATE=CLOSED;
endcase
end
其实就是一个状态机,把状态变量定义成参数
[ 本帖最后由 xjtu_zhanglei 于 2008-8-26 17:38 编辑 ]



最新回复
xjtu_zhanglei (2008-8-27 10:02:08)
自己******
xjtu_zhanglei (2008-8-27 15:05:01)
parameter a=8'b00001111;
[email=always@(posedge]always@(posedge[/email] clk) begin
b<=a;
end
那么a 算是常数还是signal?
我理解的是常数,但是hierarchy窗口中a显示的是signal
有高手能解答的么?
店小二 (2008-8-27 18:35:20)
至于你说的这个问题我也不大明白,希望高手能指点一下为何有这个错误
还有就是建议你把参数给去掉直接用值,看还会出现错误吗
clwyl (2008-8-27 18:48:23)
QUOTE:
parameter 后面不用定义位宽 [7:0],你把这个去掉应该就好了。店小二 (2008-8-27 18:54:47)
那本黄金手册里面说定义位宽是不标准的写法但现在大多数仿真工具也是支持的,
楼主应该是在VCS下仿的,也许VCS不支持定义位宽
但大牛Clifford E. Cummings貌似很喜欢定义位宽
[ 本帖最后由 店小二 于 2008-8-27 18:57 编辑 ]
clwyl (2008-8-27 18:58:16)
莫非是他的仿真器的问题?
请问搂主用的什么仿真器啊?你怎么看出来这个仿真器把parameter认为是signal呢?
xjtu_zhanglei (2008-8-27 23:12:39)
我在modelsim中也仿过没问题,
现在用vcs仿的,主要是想用到vcs里面的trace信号的功能
在hierarchy窗口中这些定义的参数都会显示为signal(就是选择signal和port的那个选项,选择signal的时候那些定义的参数都列在里面)
楼上各位说过的问题我也试过,把位宽去掉也没用,还是一样
不知道怎么回事
还请大牛们解答
xjtu_zhanglei (2008-9-09 14:15:12)
还是回出现这个问题
把定义的参数当成了signal,无奈了
[localimg=400,300]2[/localimg]!
[ 本帖最后由 xjtu_zhanglei 于 2008-9-9 14:26 编辑 ]