作者papa2958 (噹噹是藍 妳是白)
看板Electronics
標題[問題] 16個led跑馬燈的問題
時間Sat Apr 25 22:25:11 2009
我要作一個 從右亮到左 然後在從左亮到右的跑馬燈
總共有16個,然後當跑馬燈在最右邊或最左邊亮時,後來的out就會等於
原先out加上輸入的數字(stepsize)
這是我的程式碼(我只想到這種笨方法 所以很長)
不知道哪裡寫錯了 那個1的值都不會跑...
還是用狀態機比較好呢?
麻煩知道的人教我 謝謝!!
module runled(out,led,speed1,clk2,stepsize);
output led;
reg [15:0]led;
input speed1;
input clk2;
input stepsize;
output out;
reg [6:0]out;
always@(posedge clk2 or speed1)
begin if(speed1==1)
out=7'b0;
led=0;
led[15]=1;
if(led[15]==1)
begin
led[14]<=led[15];
led[15]<=0;
end
else if(led[14]==1)
begin
led[13]<=led[14];
led[15]<=0;
end
else if(led[13]==1)
begin
led[12]<=led[13];
led[13]<=0;
end
else if(led[12]==1)
begin
led[11]<=led[12];
led[12]<=0;
end
else if(led[11]==1)
begin
led[9]<=led[10];
led[10]<=0;
end
else if(led[9]==1)
begin
led[8]<=led[9];
led[9]<=0;
end
else if(led[8]==1)
begin
led[7]<=led[8];
led[8]<=0;
end
else if(led[7]==1)
begin
led[6]<=led[7];
led[7]<=0;
end
else if(led[6]==1)
begin
led[5]<=led[6];
led[6]<=0;
end
else if(led[5]==1)
begin
led[4]<=led[5];
led[5]<=0;
end
else if(led[4]==1)
begin
led[3]<=led[4];
led[4]<=0;
end
else if(led[3]==1)
begin
led[2]<=led[3];
led[3]<=0;
end
else if(led[2]==1)
begin
led[1]<=led[2];
led[2]<=0;
end
else if(led[1]==1)
begin
led[0]<=led[1];
led[1]<=0;
end
if(led[15]==1)begin
out<=out+stepsize;
end
else if(led[0]==1)
out<=out+stepsize;
end
endmodule
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.217.238
※ 編輯: papa2958 來自: 140.115.217.238 (04/25 22:25)
1F:推 ksmrt0123:把led[15:0]當做shift register, reset給16'h8000 04/25 22:43
2F:→ ksmrt0123:要有一個register記著左移或右移 04/25 22:45
3F:→ ksmrt0123:然後就 "shift過來 shift過去" 就好了... 04/25 22:46
4F:推 mepass:怎麼好像最近都只有verilog討論 學VHDL比較少嗎 哭哭 04/25 22:51
5F:→ papa2958:reset給16'h8000?? 這個看不太懂 我這樣寫不是就是 04/25 22:54
6F:→ papa2958:shift register了? 04/25 22:54
7F:推 ksmrt0123:抱歉, 我的意思是, shift用這樣的寫法: 04/25 23:04
8F:→ ksmrt0123: led[15:0] <= {1'b0, led[15:1]}; // right shift 04/25 23:05
9F:→ ksmrt0123:reset時把16'h8000 assign給 led[15:0] 04/25 23:07