Trending News
verilog 的INOUT問題~
這是我寫的I/O的程式~
不知道這些警告要如何處理~
而且我在模擬的時候都會有一些奇怪的凸波~
不知道是哪邊有問題~
圖片參考:http://imgcld.yimg.com/8/n/AC04754701/o/1611071004...
中間有很多奇怪的凸波~
不知道要如何解決~
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;
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
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
data_reg<=12'b000001001000;
end
8'b00000011://3
begin
cs<=1'b1;
wr<=1'b1;
data_reg<=12'b000001001000;
default :
begin
cs <=1;
rd <=1;
wr <=1;
cs_data <= 1;
end
endcase
endmodule
AD0~AD5幾乎一樣所以只貼一個~
要完整程式請在跟我要~
在cs,rd,wr都有很小的凸波~
我把cnt那邊改成 always @(negedge cnt)
突坡有改善~
但是波形有一些地方跑掉了~
我第一次寫INOUT不知道這樣子的寫法對不對~
1 Answer
- 10 years agoFavorite 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): 我, 我, 我