北郵22信通一枚~
跟隨課程進(jìn)度更新北郵信通院數(shù)字系統(tǒng)設(shè)計(jì)的筆記、代碼和文章
持續(xù)關(guān)注作者 迎接數(shù)電實(shí)驗(yàn)學(xué)習(xí)~
獲取更多文章,請(qǐng)?jiān)L問專欄:
北郵22級(jí)信通院數(shù)電實(shí)驗(yàn)_青山如墨雨如畫的博客-CSDN博客
目錄
一.代碼部分
1.1一些更新和講解
1.2改正后的代碼
?二.管腳分配
三.實(shí)驗(yàn)效果
一.代碼部分
1.1一些更新和講解
12.03更新:
pwm……很抽象 原先版本的代碼運(yùn)行之后應(yīng)該是亮白燈()我班大佬幫改了一下之后目前如下這個(gè)樣子,,,,
邏輯都一樣就是寫法不同,,,不知道為啥就好使了,,,
還有佬能給解釋一下不,,,
然后:借鑒的時(shí)候別忘了把我前面的注釋刪下去()
12.03更新2:
感謝評(píng)論區(qū)各位uu?。?/strong>
明白原先是怎么錯(cuò)的了 例化的時(shí)候函數(shù)參數(shù)調(diào)用順序錯(cuò)了
原先那么寫也是可以的,,例化的時(shí)候調(diào)一下函數(shù)參數(shù)順序就可以了
//完了C++知識(shí)是忘光了()
//12.03更新:我班大佬幫改出來了::
//原先的這段不行 但不知道為啥不行(
//借鑒的時(shí)候別忘了把這段刪下去(
/*
module pwm
(
input [7:0] duty,
input clk,
output reg out
);
reg [7:0] buffer;
always @ (posedge clk)
begin
buffer <= buffer + 1;
if(buffer < duty)
begin out <= 0;end
else
begin out <= 1;end
end
endmodule
*/
/*
12.03更新2:
原pwm模塊書寫沒有問題,例化的時(shí)候函數(shù)參數(shù)調(diào)用順序出了問題
例化時(shí)應(yīng)改為:pwm pwm_red(red,clk,red_buffer);
*/
// 模塊定義: pwm
// 該模塊實(shí)現(xiàn)一個(gè)簡(jiǎn)單的脈寬調(diào)制(PWM)發(fā)生器。
module pwm(out,duty,clk);
input [7:0] duty; // 輸入,表示占空比,范圍從0到255
input clk; // 輸入,時(shí)鐘信號(hào)用于同步
output reg out; // 輸出信號(hào),表示PWM波形
reg [7:0] buffer; // 8位寄存器,用于存儲(chǔ)當(dāng)前計(jì)數(shù)值
always @ (posedge clk)
begin
buffer <= buffer + 1;// 在每個(gè)時(shí)鐘上升沿遞增緩沖區(qū)值
if (buffer < duty)// 將緩沖區(qū)值與占空比進(jìn)行比較:如果緩沖區(qū)小于占空比,則將輸出設(shè)置為0;否則,設(shè)置為1。
begin
out <= 0;
end
else
begin
out <= 1;
end
end
endmodule
module rainbow_breathing_light
(clk,red,green,blue);
input clk;
output red,green,blue;
reg [15:0] wheel_position;
reg [7:0] wheel_position_buffer;
reg [7:0] red_buffer,green_buffer,blue_buffer;
reg [31:0] divide_buffer;
wire clk;
reg divide_clk;
pwm pwm_red(red,red_buffer,clk);
pwm pwm_green(green,green_buffer,clk);
pwm pwm_blue(blue,blue_buffer,clk);
always @ (posedge clk)
begin
if(divide_buffer < 50000)
begin divide_buffer <= divide_buffer + 1;end
else
begin
divide_clk <= ~divide_clk;
divide_buffer <= 0;
end
end
always @ (posedge divide_clk)
begin
if(wheel_position < 765)
wheel_position <= wheel_position + 1;
else
wheel_position <= 0;
if(wheel_position < 255)
begin
red_buffer <= 255 - wheel_position;
green_buffer <= 0;
blue_buffer <= wheel_position;
end
else if(wheel_position < 510)
begin
red_buffer <= 0;
green_buffer <= wheel_position - 255;
blue_buffer <= 255 - (wheel_position - 255);
end
else
begin
red_buffer <= wheel_position - 510;
green_buffer <= 255 - (wheel_position - 510);
blue_buffer <= 0;
end
end
endmodule
1.2改正后的代碼
將模塊定義(類比C++函數(shù)接口定義)中的形參順序改動(dòng):
rainbow_breathing_light.v
// 模塊定義: pwm
// 該模塊實(shí)現(xiàn)一個(gè)簡(jiǎn)單的脈寬調(diào)制(PWM)發(fā)生器。
module pwm(out,duty,clk);
input [7:0] duty; // 輸入,表示占空比,范圍從0到255
input clk; // 輸入,時(shí)鐘信號(hào)用于同步
output reg out; // 輸出信號(hào),表示PWM波形
reg [7:0] buffer; // 8位寄存器,用于存儲(chǔ)當(dāng)前計(jì)數(shù)值
always @ (posedge clk)
begin
buffer <= buffer + 1;// 在每個(gè)時(shí)鐘上升沿遞增緩沖區(qū)值
if (buffer < duty)// 將緩沖區(qū)值與占空比進(jìn)行比較:如果緩沖區(qū)小于占空比,則將輸出設(shè)置為0;否則,設(shè)置為1。
begin
out <= 0;
end
else
begin
out <= 1;
end
end
endmodule
module rainbow_breathing_light
(clk,red,green,blue);
input clk;
output red,green,blue;
reg [15:0] wheel_position;
reg [7:0] wheel_position_buffer;
reg [7:0] red_buffer,green_buffer,blue_buffer;
reg [31:0] divide_buffer;
wire clk;
reg divide_clk;
pwm pwm_red(red,red_buffer,clk);
pwm pwm_green(green,green_buffer,clk);
pwm pwm_blue(blue,blue_buffer,clk);
always @ (posedge clk)
begin
if(divide_buffer < 50000)
begin divide_buffer <= divide_buffer + 1;end
else
begin
divide_clk <= ~divide_clk;
divide_buffer <= 0;
end
end
always @ (posedge divide_clk)
begin
if(wheel_position < 765)
wheel_position <= wheel_position + 1;
else
wheel_position <= 0;
if(wheel_position < 255)
begin
red_buffer <= 255 - wheel_position;
green_buffer <= 0;
blue_buffer <= wheel_position;
end
else if(wheel_position < 510)
begin
red_buffer <= 0;
green_buffer <= wheel_position - 255;
blue_buffer <= 255 - (wheel_position - 255);
end
else
begin
red_buffer <= wheel_position - 510;
green_buffer <= 255 - (wheel_position - 510);
blue_buffer <= 0;
end
end
endmodule
?二.管腳分配
文章來源:http://www.zghlxwxcb.cn/news/detail-762621.html
三.實(shí)驗(yàn)效果
彩虹呼吸燈。?文章來源地址http://www.zghlxwxcb.cn/news/detail-762621.html
到了這里,關(guān)于北郵22級(jí)信通院數(shù)電:Verilog-FPGA(12)第十二周實(shí)驗(yàn)(2)彩虹呼吸燈(bug已解決 更新至3.0)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!