久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
特權同學深入淺出玩轉FPGA源代碼
[打印本頁]
作者:
牧野溪風
時間:
2018-8-29 12:09
標題:
特權同學深入淺出玩轉FPGA源代碼
特權同學深入淺出玩轉FPGA課程源代碼
首先,感謝特權同學的分享、教導,讓向我這樣的初學者,能夠有一個良好的入門平臺。。言歸正傳,這是我整理出來的代碼文檔,希望能幫到各位初學者。
1.分頻器
`timescale 1ns / 1ps
module clkdiv(
clk,rst_n,
clk_div
);
input clk; //50MHz
input rst_n; //低電平復位信號
output clk_div; //分頻信號,連接到蜂鳴器
//---------------------------------------------------
reg[19:0] cnt; //分頻計數器
always @ (posedge clk or negedge rst_n) //異步復位
if(!rst_n) cnt <= 20'd0;
else cnt <= cnt+1'b1; //寄存器cnt 20ms循環計數
//----------------------------------------------------
reg clk_div_r; //clk_div信號值寄存器
always @ (posedge clk or negedge rst_n)
if(!rst_n) clk_div_r <= 1'b0;
else if(cnt == 20'hfffff) clk_div_r <= ~clk_div_r; //每20ms讓clk_div_r值翻轉一次
assign clk_div = clk_div_r;
endmodule
復制代碼
8.串口發送接收2
`timescale 1ns / 1ps
module my_uart_tx(clk,rst_n,clk_bps,rx_data,rx_int,rs232_tx,bps_start);
input clk; // 50MHz主時鐘
input rst_n; //低電平復位信號
input clk_bps; // clk_bps的高電平為接收或者發送數據位的中間采樣點
input[7:0] rx_data; //接收數據寄存器
input rx_int; //接收數據中斷信號,接收到數據期間始終為高電平,在此利用它的上升沿來啟動發送數據
output rs232_tx; // RS232發送數據信號
output bps_start; //接收或者要發送數據,波特率時鐘啟動信號置位
//---------------------------------------------------------
reg rx_int0,rx_int1,rx_int2; //rx_int信號寄存器,捕捉下降沿濾波用
wire pos_rx_int; // rx_int下降沿標志位
always @ (posedge clk or negedge rst_n) begin
if(!rst_n) begin
rx_int0 <= 1'b0;
rx_int1 <= 1'b0;
rx_int2 <= 1'b0;
end
else begin
rx_int0 <= rx_int;
rx_int1 <= rx_int0;
rx_int2 <= rx_int1;
end
end
assign pos_rx_int = rx_int1 & ~rx_int2; //捕捉到上升沿后,neg_rx_int拉地保持一個主時鐘周期
//---------------------------------------------------------
reg[7:0] tx_data; //待發送數據的寄存器
//---------------------------------------------------------
reg bps_start_r;
reg tx_en; //發送數據使能信號,高有效
reg[3:0] num;
always @ (posedge clk or negedge rst_n) begin
if(!rst_n) begin
bps_start_r <= 1'bz;
tx_en <= 1'b0;
tx_data <= 8'd0;
end
else if(pos_rx_int) begin //接收數據完畢,準備把接收到的數據發出去
bps_start_r <= 1'b1;
tx_data <= rx_data; //把接收到的數據存入發送數據寄存器
tx_en <= 1'b1; //進入發送數據狀態中
end
else if(num==4'd11) begin //數據發送完成,復位
bps_start_r <= 1'b0;
tx_en <= 1'b0;
end
end
assign bps_start = bps_start_r;
//---------------------------------------------------------
reg rs232_tx_r;
always @ (posedge clk or negedge rst_n) begin
if(!rst_n) begin
num <= 4'd0;
rs232_tx_r <= 1'b1;
end
else if(tx_en) begin
if(clk_bps) begin
num <= num+1'b1;
case (num)
4'd0: rs232_tx_r <= 1'b0; //發送起始位
4'd1: rs232_tx_r <= tx_data[0]; //發送bit0
4'd2: rs232_tx_r <= tx_data[1]; //發送bit1
4'd3: rs232_tx_r <= tx_data[2]; //發送bit2
4'd4: rs232_tx_r <= tx_data[3]; //發送bit3
4'd5: rs232_tx_r <= tx_data[4]; //發送bit4
4'd6: rs232_tx_r <= tx_data[5]; //發送bit5
4'd7: rs232_tx_r <= tx_data[6]; //發送bit6
4'd8: rs232_tx_r <= tx_data[7]; //發送bit7
4'd9: rs232_tx_r <= 1'b1; //發送結束位
default: rs232_tx_r <= 1'b1;
endcase
end
else if(num==4'd11) num <= 4'd0; //復位
end
end
assign rs232_tx = rs232_tx_r;
endmodule
`timescale 1ns / 1ps
module ps2_key(clk,rst_n,ps2k_clk,ps2k_data,rs232_tx);
input clk; //50M時鐘信號
input rst_n; //復位信號
input ps2k_clk; //PS2接口時鐘信號
input ps2k_data; //PS2接口數據信號
output rs232_tx; // RS232發送數據信號
wire[7:0] ps2_byte; // 1byte鍵值
wire ps2_state; //按鍵狀態標志位
wire bps_start; //接收到數據后,波特率時鐘啟動信號置位
wire clk_bps; // clk_bps的高電平為接收或者發送數據位的中間采樣點
ps2scan ps2scan( .clk(clk), //按鍵掃描模塊
.rst_n(rst_n),
.ps2k_clk(ps2k_clk),
.ps2k_data(ps2k_data),
.ps2_byte(ps2_byte),
.ps2_state(ps2_state)
);
speed_select speed_select( .clk(clk),
.rst_n(rst_n),
.bps_start(bps_start),
.clk_bps(clk_bps)
);
my_uart_tx my_uart_tx( .clk(clk),
.rst_n(rst_n),
.clk_bps(clk_bps),
.rx_data(ps2_byte),
.rx_int(ps2_state),
.rs232_tx(rs232_tx),
.bps_start(bps_start)
);
endmodule
`timescale 1ns / 1ps
module ps2scan(clk,rst_n,ps2k_clk,ps2k_data,ps2_byte,ps2_state);
input clk; //50M時鐘信號
input rst_n; //復位信號
input ps2k_clk; //PS2接口時鐘信號
input ps2k_data; //PS2接口數據信號
output[7:0] ps2_byte; // 1byte鍵值,只做簡單的按鍵掃描
output ps2_state; //鍵盤當前狀態,ps2_state=1表示有鍵被按下
//------------------------------------------
reg ps2k_clk_r0,ps2k_clk_r1,ps2k_clk_r2; //ps2k_clk狀態寄存器
//wire pos_ps2k_clk; // ps2k_clk上升沿標志位
wire neg_ps2k_clk; // ps2k_clk下降沿標志位
…………
…………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
完整的Word格式文檔51黑下載地址(共54頁):
特權同學-深入淺出玩轉FPGA源代碼.docx
(46.16 KB, 下載次數: 56)
2018-8-29 12:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
lmyyjx
時間:
2025-2-27 13:33
正在找特權同學資料
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
91蜜桃在线观看
|
日韩视频免费看
|
亚洲一区二区三区视频
|
亚洲精品www久久久久久广东
|
久久精品国产亚洲
|
一区二区三区毛片
|
日韩视频一区二区
|
国产精品国产
|
亚洲色在线视频
|
亚洲人天堂
|
亚洲欧美日韩一区二区三区四区
|
亚洲欧美精品一区二区
|
欧美日韩高清在线
|
国产成人精品久久久
|
91av在线看
|
亚洲狠狠
|
av片网站
|
四虎永久网址
|
长河落日连续剧48集免费观看
|
亚洲免费小视频
|
黄色三级在线
|
成人激情视频在线观看
|
中文在线观看免费视频
|
国产91热爆ts人妖系列
|
日韩在线视频免费
|
午夜美女福利视频
|
亚洲欧美精品一区二区
|
国产午夜精品一区二区三区视频
|
亚洲综合精品
|
荤话粗俗h高h重口
|
黄色一级免费视频
|
成人免费视频一区二区
|
91蝌蚪少妇偷拍
|
91亚洲精品乱码久久久久久蜜桃
|
色播综合
|
毛片aaa
|
成人福利网站
|
中文字幕在线一区
|
天天躁狠狠躁
|
国产草草
|
成人精品在线
|