verilog 的INOUT問題~

這是我寫的I/O的程式~

不知道這些警告要如何處理~

而且我在模擬的時候都會有一些奇怪的凸波~

不知道是哪邊有問題~

圖片參考:http://imgcld.yimg.com/8/n/AC04754701/o/1611071004...

中間有很多奇怪的凸波~

不知道要如何解決~

Update:

module ad196 (clk2m,rst,int_n,data,cs,wr,rd,AD0,AD1,AD2,AD3,AD4,AD5);

input clk2m;

input rst;

input int_n;

inout [11:0] data;

output cs;

output wr;

output rd;

output [11:0] AD0,AD1,AD2,AD3,AD4,AD5;

reg [11:0] AD0,AD1,AD2,AD3,AD4,AD5;

reg cs,wr,rd;

reg [11:0] data_reg;

reg cs_data;

reg [7:0]cnt;

Update 2:

assign data=(cs_data <= 0)?data_reg: 12'bz;

always @(posedge clk2m)

begin

if(!rst)

cnt<=0;

else if (cnt == 8'b1011_0101)//181

cnt<=0;

else

cnt=cnt+1;

end

Update 3:

always @(cnt)

case(cnt[7:0])

//AD0

8'b00000001://1

begin

cs<=1'b0;

wr<=1'b0;

cs_data <= 0;

data_reg<=12'b000001001000;

end

8'b00000010://2

begin

Update 4:

data_reg<=12'b000001001000;

end

8'b00000011://3

begin

cs<=1'b1;

wr<=1'b1;

data_reg<=12'b000001001000;

Update 5:

default :

begin

cs <=1;

rd <=1;

wr <=1;

cs_data <= 1;

end

endcase

endmodule

AD0~AD5幾乎一樣所以只貼一個~

要完整程式請在跟我要~

Update 7:

在cs,rd,wr都有很小的凸波~

我把cnt那邊改成 always @(negedge cnt)

突坡有改善~

但是波形有一些地方跑掉了~

我第一次寫INOUT不知道這樣子的寫法對不對~

https://docs.google.com/document/d/1Pp_3eHBtQlzizt...

Update 8:

https://picasaweb.google.com/lh/photo/WaDMgpRyjA75...

紅色圈起來的部份是我說突波~

如果我要讓AD0~AD5輸出的資料維持住這樣寫可以嗎?~

1 Answer

Rating
  • 10 years ago
    Favorite Answer

    我看不太清楚你的圖, 所以不太清楚你說的突波是在說哪個port,

    不過我猜應該說的是inout data port的地方吧?看完你的code,我想應該是在always @(cnt)這個block中, 在某些cs_data在0,1互換的case你的data_reg也同時有改變,所以才會造成這現象.

    我的建議有兩種

    1. 是因為你的data port在cs_data>0的時候會是high impedance, 這時候如果沒有必要, data_reg就不用改變它

    2. always @(cnt) 的assignment都改成blocking assignment

    試試看吧, 我沒有真的開modelsim來跑過, 如果不行再討論

    2011-07-13 09:40:16 補充:

    你inout的寫法是對的,但是把always @(cnt)改成always @(negedge cnt)這個部份應該是不正確的,因為除了clock之外, 通常一個電路裡不太會有其它的邊緣觸發吧?這樣寫的話波型會跑掉是正常的..所以應該是保留用always @(cnt), 然後把data_reg不必要的改變去掉(cs_data不等於0的情況)

    另外一點是你說cs,rd,wr的地方在你後來附的圖我看不到有突波啊..如果你說的是一個clock的那個pulse, 那應該是你本來就這樣寫吧, 再試一下吧

    2011-07-13 19:44:30 補充:

    會有那個突波應該是正常的, 因為你用的是always @(cnt), 你會發現所有的突波都會發生在cnt的值在改變的時候, 這是因為那一瞬間cnt的值並不穩定, 所以才會有那些突波出現, 如果要避免這個現象, 你可以一樣改用always @(negedge clk2m), 只是這樣有可能會讓你cs,rd,wr 這些訊號有一個clock的latency. AD0~AD5的部份應該是可以的.

    Source(s): 我, 我, 我
Still have questions? Get your answers by asking now.