二.EP2C8Q208 FPGA(循環(huán)點(diǎn)亮LED燈)


1 介紹

1.1 實(shí)現(xiàn)說(shuō)明

使用FPGA循環(huán)點(diǎn)亮led燈,有2種方式,有計(jì)數(shù),計(jì)時(shí)等。

1.2 硬件接口

按照上一節(jié),我們需要添加晶振電路,作為整個(gè)系統(tǒng)的時(shí)鐘來(lái)源。


時(shí)鐘電路

2 軟件實(shí)現(xiàn)

2.1 計(jì)時(shí)循環(huán)點(diǎn)亮1個(gè)LED燈

不做過(guò)多介紹,只需要了解基本的verilog語(yǔ)法即可。我貼出源代碼led_module.v:

module led_module(
    clock,led0
);
input  clock;
output led0;

reg rValue = 0;
wire led0 = rValue;
reg [32:0] cnt = 32'd0;

always @(posedge clock)
begin
    if(cnt<32'd20000000) begin
        cnt <= cnt + 1'd1;
    end
    else
    begin
        cnt <= 1'd0;
        rValue <= rValue + 1'd1;
        if(rValue == 2) begin
            rValue <= 0;
        end
    end   
end
endmodule

引腳分配如下圖所示:


引腳分配

其他如時(shí)鐘燈和前面的章節(jié)描述相同。

該試驗(yàn)?zāi)茯?yàn)證的內(nèi)容是led燈會(huì)亮一秒,滅一秒,一直循環(huán)下去。

2.2 計(jì)時(shí)循環(huán)點(diǎn)亮4個(gè)LED燈

這節(jié)使用頂層與底層設(shè)計(jì)思路,建立一個(gè)程序。
首先是引腳分配:


引腳分配

頂層程序led_module.v:

module led_module(
    clock,led 
);

input  clock;
output [3:0] led;

wire led0;
led0_module_bottom u0(
    .clock(clock),
    .led(led0)
); 


wire led1;
led1_module_bottom u1(
    .clock(clock),
    .led(led1)
); 

wire led2;
led2_module_bottom u2(
    .clock(clock),
    .led(led2)
); 

wire led3;
led3_module_bottom u3(
    .clock(clock),
    .led(led3)
); 
assign led = {led3,led2,led1,led0};
endmodule

其余是底層程序:
led0_bottom.v:

module led0_module_bottom(
    clock,led
);
input  clock;
output led;

reg rValue = 0;
wire led = rValue;
reg [32:0] cnt = 32'd0;

always @(posedge clock)
begin
    if(cnt<32'd2000000) begin
        cnt <= cnt + 1'd1;
    end
    else
    begin
        cnt <= 1'd0;
        rValue <= rValue + 1'd1;
        if(rValue == 2) begin
            rValue <= 0;
        end
    end   
end

endmodule

led1_bottom.v:

module led1_module_bottom(
    clock,led
);
input  clock;
output led;

reg rValue = 0;
wire led = rValue;
reg [32:0] cnt = 32'd0;

always @(posedge clock)
begin
    if(cnt<32'd20000000) begin
        cnt <= cnt + 1'd1;
    end
    else
    begin
        cnt <= 1'd0;
        rValue <= rValue + 1'd1;
        if(rValue == 2) begin
            rValue <= 0;
        end
    end   
end

endmodule

led2_bottom.v:

module led2_module_bottom(
    clock,led
);
input  clock;
output led;

reg rValue = 0;
wire led = rValue;
reg [32:0] cnt = 32'd0;

always @(posedge clock)
begin
    if(cnt<32'd1000000) begin
        cnt <= cnt + 1'd1;
    end
    else
    begin
        cnt <= 1'd0;
        rValue <= rValue + 1'd1;
        if(rValue == 2) begin
            rValue <= 0;
        end
    end   
end

endmodule

led3_bottom.v:

module led3_module_bottom(
    clock,led
);
input  clock;
output led;

reg rValue = 0;
wire led = rValue;
reg [32:0] cnt = 32'd0;

always @(posedge clock)
begin
    if(cnt<32'd5000000) begin
        cnt <= cnt + 1'd1;
    end
    else
    begin
        cnt <= 1'd0;
        rValue <= rValue + 1'd1;
        if(rValue == 2) begin
            rValue <= 0;
        end
    end   
end

endmodule

這個(gè)程序?qū)崿F(xiàn)的是每一個(gè)led燈的閃爍都是按照各自設(shè)計(jì)的時(shí)間來(lái)的,從中,我們可以體會(huì)出fpga的并行設(shè)計(jì)的思想。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容