程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> verilog程序-幫忙修改一下這個Verilog程序,關於兩個源驅動同一個輸出

verilog程序-幫忙修改一下這個Verilog程序,關於兩個源驅動同一個輸出

編輯:編程綜合問答
幫忙修改一下這個Verilog程序,關於兩個源驅動同一個輸出

要實現oe發生跳變時,這個輸出置0,當定時時間到來時這個輸出置1;
一下這個程序,幫忙修改下:
module Timer (
input rst,
input oe,
input clk,
output TI_flag
);

parameter
Ttime=100 ;//定時時間

wire flag; //定時器溢出標志位

reg [31:0] count;

assign (supply1 ,weak0)flag= (oe | ~oe) ? 0:1;
assign TI_flag=flag;
always @(posedge clk or negedge rst )
begin
if(!rst)
begin
count<=0;
flag<=0;
#3 flag<=1; //這裡線網不能進行賦值
end
else if(count<(Ttime-1)&!TI_flag)

begin
count<=count+1'b1;
end
else
begin
count<=32'b0;
#3 flag<=0;
flag<=1; //定時溢出,標志位置1,定時完成,滅掉LED
end
end
endmodule

最佳回答:


我自己解決了 ,原來用狀態機就好了

module Timer (
input rst,
input oe,
input clk,
output TI_flag
);

parameter
Ttime=100 ,//定時時間

status0=0, //狀態參數
status1=1,
status2=2;
reg [2:0] st=status0;

reg flag=1; //定時器溢出標志位

reg [31:0] count=0;
assign TI_flag= flag;

always @(posedge clk or negedge rst )
begin
if(!rst)
begin
st<=status0;
count<=0;
flag<=1;
end

case (st)
status0: begin
if(oe)
begin
flag<=0; //清零 開始計數定時
count<=0;

st<=status1;
end
else
st<= status0;
end
status1:begin
if(count<Ttime-1)
begin

st<=status1;
count<=count + 1;
end
else
begin
flag<=1;

st<=status2;
end

end

status2: begin
while(oe); //等待不使能定時器信號,使得可以讓下一次oe=1信號來臨時定時器被觸發
st<=status0;
end
default: st<=status0;

endcase
end
endmodule

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved