驅動ft232h通信

FT232H是一個單通道USB 2.0高速(480Mb/s)轉換為UART/FIFO IC,具有多種工業標準串行或并行接口配置能力。

1.實驗板卡

FPGA型號:

FT232H型號:

FT232H SINGLE CHANNEL HI-SPEED USB TO MULTIPURPOSE UART/FIFO IC Datasheet
Version 2.0

2.數據手冊說明

選擇的是同步fifo模式。上面是管腳信號說明。

以上是讀寫時序

注意這里的時鐘周期是60mhz,我用的是FPGA上的PLL輸出的60m的時鐘,因為如果要用FT232H輸出的時鐘的話,需要對EEPROM進行配置,配置成FIFO模式,再通過上位機發送同步指令才可以輸出60MHZ時鐘。

時鐘周期等于16.67 ns,也就是時鐘頻率是1/T=1/16.67ns=1/1.67*10^(-9),結果約等于60MHZ。

FT232配置見:FPGA外接FT232H配置FIFO實現USB通信回環測試-CSDN博客

3.代碼設計

FPGA中FIFO IP的時序。寫的時候寫使能和數據是同步的,讀出數據的時候,讀出的數據延遲讀使能信號一個周期。

3.1?ft232h_top

module ft232h_top(/////////////////////////////debuginput jtag_inst1_CAPTURE  ,input jtag_inst1_DRCK 	  ,input jtag_inst1_RESET 	  ,input jtag_inst1_RUNTEST  ,input jtag_inst1_SEL 	  ,input jtag_inst1_SHIFT 	  ,input jtag_inst1_TCK 	  ,input jtag_inst1_TDI 	  ,input jtag_inst1_TMS 	  ,input jtag_inst1_UPDATE   ,output jtag_inst1_TDO	  ,/////////////////////////////////input 				i_usb_60m		,//input 				reset		,input 				rxf_n		,input 				txe_n		,output  			rd_n		,output  			wr_n		,output 				siwu_n		,output  			oe_n		, //oe_n:0,FT232h數據輸出;oe_n:1,FPGA數據輸入到FT232中去	input 	[7:0]		data_in		,output  [7:0]		data_out	,output  [7:0]		data_out_oe	);wire empty;
wire [7:0]data_wr;
wire wr_fifo;
wire rst_busy;
wire full;
wire [7:0] data_rd;
wire reset		;
wire [7:0]data_count;
wire rd_fifo_flag_r;
wire rd_fifo_flag;assign siwu_n=1'b1;        //用于喚醒主機電腦fifo u_fifo(
.full_o 		( full ),
.empty_o 		( empty ),
.rdata 			( data_rd ),
.clk_i 			( i_usb_60m ),
.wr_en_i 		( wr_fifo ),
.rd_en_i 		( rd_fifo ),
//.a_rst_i 		( vio_reset_n ),
.a_rst_i 		( reset ),
.wdata 			( data_wr ),
.datacount_o 	( data_count ),
.rst_busy 		(  ) //高電平有效,高電平復位
);ft232h_send ft232h_send_inst(.clk_60m	(i_usb_60m)	,//.reset	(vio_reset_n)	,.reset	(reset)	,.rxf_n		(rxf_n)		, .data_in	(data_in)	, .wr_n		(wr_n),.rd_n		(rd_n)		, .oe_n	    (oe_n) , .empty_o	(empty)		,.full_o		(full)		,//.rst_busy	(rst_busy)	,.data_wr    (data_wr)  	, .wr_fifo	(wr_fifo)	
);ft232h_recv ft232h_recv_inst(.clk_60m	(i_usb_60m)	,//.reset	(vio_reset_n)	,.reset	(reset)	,.txe_n		(txe_n),.rd_n		(rd_n),.oe_n		(oe_n),.rxf_n		(rxf_n),.wr_fifo	(wr_fifo),.wr_n		(wr_n),.data_out	(data_out),.data_out_oe(data_out_oe),//.rst_busy	(rst_busy),.data_count (data_count),.full_o		(full),.empty_o	(empty)	,.data_rd	(data_rd)	,.rd_fifo	(rd_fifo)	,.rd_fifo_flag_r	(rd_fifo_flag_r),.rd_fifo_flag	(rd_fifo_flag)
);edb_top edb_top_inst (.bscan_CAPTURE      ( jtag_inst1_CAPTURE ),.bscan_DRCK         ( jtag_inst1_DRCK ),.bscan_RESET        ( jtag_inst1_RESET ),.bscan_RUNTEST      ( jtag_inst1_RUNTEST ),.bscan_SEL          ( jtag_inst1_SEL ),.bscan_SHIFT        ( jtag_inst1_SHIFT ),.bscan_TCK          ( jtag_inst1_TCK ),.bscan_TDI          ( jtag_inst1_TDI ),.bscan_TMS          ( jtag_inst1_TMS ),.bscan_UPDATE       ( jtag_inst1_UPDATE ),.bscan_TDO          ( jtag_inst1_TDO ),.la0_clk            ( i_usb_60m ),.la0_rxf_n      	( rxf_n ),.la0_txe_n      	( txe_n ),.la0_rd_n       	( rd_n ),.la0_wr_n       	( wr_n ),.la0_oe_n       	( oe_n ),.la0_data_in        ( data_in ),.la0_data_out       ( data_out ),.la0_data_out_oe    ( data_out_oe ),.la0_siwu_n     	( siwu_n ),.la0_reset      	( reset ),.la0_data_wr        ( data_wr ),.la0_empty      	( empty ),.la0_full       	( full ),.la0_wr_fifo        ( wr_fifo ),.la0_data_rd        ( data_rd ),.la0_rd_fifo        ( rd_fifo ),.la0_data_count		(data_count),.la0_rd_fifo_flag_r  (rd_fifo_flag_r ),.la0_rd_fifo_flag     (rd_fifo_flag ),.vio0_clk       	( i_usb_60m ),.vio0_data_in   	( data_in ),.vio0_data_out  	( data_out ),.vio0_data_out_oe	( data_out_oe ),.vio0_reset     	( reset )
);endmodule

3.2??ft232h_send

//讀出FT232H的值,也就是驅動FT232H發送數據,
module ft232h_send(input 				clk_60m		,input 				reset		,input 				rxf_n		, //FT232h輸出的信號,當rxf_n為低時,fpga可以通過驅動RD低來讀取數據。input 	[7:0]		data_in		, //FT232h從上位機中讀出的數據input 				wr_n		,			output  reg 		rd_n		, //output 	reg 		oe_n	, //oe_n:驅動FT232H引腳上的數據輸出到FPGA//fifo信號	input				empty_o		,input 				full_o		,//input 				rst_busy	,output reg [7:0]	data_wr    , //	data_wr_reg:要寫入FPGA里面的FIFO的數據。output reg 			wr_fifo		 //fifo的寫使能信號	
);reg [7:0] data_wr_reg;reg rxf_n_r		;
reg wr_n_r		;
reg empty_o_r	;
reg oe_n_r;
reg rd_n_r;always@(posedge clk_60m or posedge reset)beginif(reset==1'b1)oe_n<=1'b1;else if(rxf_n==1'b0&&wr_n==1'b1)	oe_n<=1'b0;else oe_n<=1'b1;
endalways@(posedge clk_60m or posedge reset)beginif(reset==1'b1)rd_n<=1'b1;else beginif(oe_n==0 && wr_n == 1&&rxf_n==1'b0)  rd_n<=1'b0;elserd_n<=1'b1;end
endalways@(posedge clk_60m or posedge reset)beginif(reset==1'b1)rd_n_r<=1'b1;else beginrd_n_r<=rd_n;end
endalways@(posedge clk_60m or posedge reset)beginif(reset==1'b1)data_wr<='d0;else if(oe_n==1'b0&&wr_n==1'b1&&rd_n==1'b0)data_wr<=data_in;elsedata_wr<=8'h00;
end//wr_fifo:wr_fifo延遲rd_n一個周期
always@(posedge clk_60m or posedge reset)beginif(reset==1'b1)wr_fifo <= 1'b0;else if (rd_n_r==1'b1&&rd_n==1'b0&&rxf_n==1'b0&&full_o==1'b0&&wr_n==1'b1)	wr_fifo <= 1'b1;else if(rxf_n==1'b1)wr_fifo <= 1'b0;elsewr_fifo<=wr_fifo;
endendmodule

3.3?ft232h_recv

module ft232h_recv(input 				clk_60m		,input 				reset		,input 				txe_n		,input 				rd_n		,input 				oe_n		,input 				rxf_n		,input 				wr_fifo		,output reg 			wr_n		,output reg [7:0]	data_out	,output reg [7:0]    data_out_oe  ,//fifo信號//input    			rst_busy	,input 				data_count	,input				full_o		,input 				empty_o		,input [7:0]			data_rd		,output reg			rd_fifo		,output reg 			rd_fifo_flag_r,output reg 			rd_fifo_flag
);reg rd_fifo_r;
reg rd_fifo_flag;
//reg rd_fifo_flag_r;
reg empty_o_r		;always@(posedge clk_60m or posedge reset)beginif(reset==1'b1)empty_o_r<=1'b0;elseempty_o_r<=empty_o;
endalways@(posedge clk_60m or posedge reset)beginif(reset==1'b1)rd_fifo<=1'b0;else if(txe_n==1'b0&&empty_o==1'b0&&rd_n==1'b1)rd_fifo<=1'b1;elserd_fifo<=1'b0;
endalways@(posedge clk_60m or posedge reset)beginif(reset==1'b1)rd_fifo_flag<=1'b0;else if(rd_fifo==1'b1&&rd_fifo_r==1'b0)rd_fifo_flag<=1'b1;elserd_fifo_flag<=1'b0;
endalways@(posedge clk_60m or posedge reset)beginif(reset==1'b1)rd_fifo_flag_r<=1'b0;else rd_fifo_flag_r<=rd_fifo_flag;
endalways@(posedge clk_60m or posedge reset)beginif(reset==1'b1)rd_fifo_r<=1'b0;elserd_fifo_r<=rd_fifo;
endalways@(posedge clk_60m or posedge reset)beginif(reset==1'b1)begindata_out<='d0;endelsedata_out<=data_rd;	
endalways@(posedge clk_60m or posedge reset)beginif(reset==1'b1)begindata_out_oe<='d0;endelse if(rd_fifo_flag==1'b1&&txe_n==1'b0&&empty_o==1'b0&&rd_n==1'b1)data_out_oe<=8'hff;else if(empty_o_r==1'b1||txe_n==1'b1)data_out_oe<='d0;elsedata_out_oe<=data_out_oe;
endalways@(posedge clk_60m or posedge reset)beginif(reset==1'b1)wr_n<=1'b1;else beginif(rd_fifo_flag==1'b1&&txe_n==1'b0&&empty_o==1'b0&&rd_n==1'b1)wr_n<=1'b0;	else if(empty_o_r==1'b1||txe_n==1'b1)wr_n<=1'b1;elsewr_n<=wr_n;end
endendmodule

4.波形分析

5.管腳綁定

6.注意事項

(1)如果要使用外部輸入的時鐘作為FPGA的工作時鐘,需要對時鐘進行約束。

例如:

(2)下載比特流文件出錯的原因

使用上面這個版本有bug,燒錄比特流文件的時候,直接在下載比特流文件界面下載,把頻率改成5mhz,然后再debug界面直接連接,不再下載。

(3)連接usb線的時候需要下載正確的驅動

(4)為什么要用相位差為270°的時鐘?

(5)PLL的使用說明

PLL用法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95789.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95789.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95789.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

隔空盜刷、AI釣魚、代理劫持…金融黑產竟進化至此?

【導讀】中國工商銀行發布的《2024網絡金融黑產研究報告》&#xff0c;以深度洞察拆解黑產攻擊“新變種”、勾勒防護新路徑&#xff0c;自發布以來&#xff0c;成為金融安全行業的重要參考坐標。本文會提煉出報告中黑產攻擊的五大技術演變與體系化防護思路&#xff0c;再結合金…

服務器為啥離不開傳感器?一文看懂數據中心“隱形守護者”的關鍵角色

在現代數據中心或企業機房中&#xff0c;服務器不僅僅是“跑程序”的機器&#xff0c;它們還是一整套復雜系統的一部分。為了保證這些服務器穩定、高效、安全地運行&#xff0c;傳感器成了不可或缺的角色。那么&#xff0c;服務器為啥要有傳感器&#xff1f;這些傳感器到底是干…

React JSX 語法講解

&#x1f680; React JSX 語法講解 1. 課程概述 本課程旨在系統講解 JSX&#xff08;JavaScript XML&#xff09; 的核心概念與實戰應用。JSX 是 React 的核心語法擴展&#xff0c;它允許我們在 JavaScript 中編寫類似 HTML 的結構&#xff0c;使得構建用戶界面變得直觀和高效。…

軟件安裝教程(四):在 Windows 上安裝與配置 MATLAB(超詳細)

文章目錄前言1. 安裝前準備&#xff08;必看&#xff09;2. 下載 MATLAB&#xff08;推薦在線安裝&#xff09;3. 在 Windows 上安裝&#xff08;詳細步驟&#xff09;4. 激活 MATLAB&#xff08;在線與離線&#xff09;5. 首次啟動與界面入門6. 推薦的基本配置&#xff08;讓環…

【運維自動化-標準運維】如何創建流程嵌套(子流程)

什么是子流程節點 標準運維里的流程節點有兩類&#xff1a;標準插件節點和子流程節點。子流程節點實際上也是一個流程&#xff0c;比如某個業務線做全網更新時需要更新多個模塊&#xff0c;那每個模塊的更新流程可以稱之為一個子流程。在總流程里直接添加子流程&#xff0c;就通…

clickhouse遷移工具clickhouse-copier

原來的集群沒有高可用而且配置很低&#xff0c;所有準備將一個3分片1副本集群遷到1分片2副本的高配置集群&#xff0c;數據量比較大。 雖然官方已經標記clickhouse-copier已經過時&#xff0c;但為了方便和高效還是用了copier&#xff0c;效果還挺好 以下是使用步驟&#xff1a…

高頻超聲波傳感器:以精準感知重塑未來科技生態

在智能制造的浪潮中&#xff0c;高頻超聲波傳感器正以“隱形工程師”的角色&#xff0c;重新定義著工業檢測、醫療診斷與環境監測的邊界。這款融合了壓電材料科學與微納電子技術的精密儀器&#xff0c;憑借其亞毫米級測量精度與納秒級響應速度&#xff0c;正在成為高端裝備制造…

殘差連接與歸一化結合應用

殘差連接&#xff08;Residual Connection / Skip Connection&#xff09;和歸一化&#xff08;Normalization&#xff09;的結合&#xff0c;是現代深度學習模型&#xff08;尤其是深度神經網絡和Transformer架構&#xff09;成功的關鍵因素之一。 核心概念回顧殘差連接 (Resi…

K8s集群+Rancher Server:部署DolphinScheduler 3.2.2集群

本文手把手演示了如何在 K8s Rancher 環境中快速拉起一套生產可用的 Apache DolphinScheduler 3.2.2 集群。全文圍繞“鏡像加速、依賴本地化、存儲持久化”三大痛點展開&#xff0c;附有詳細的代碼解析&#xff0c;收藏細看吧&#xff01; 環境準備 1、軟件準備2、環境規劃部署…

查詢語言的進化:SQL之后,為什么是GQL?數據世界正在改變

數據是現代世界的核心驅動力。 在數據驅動的世界里&#xff0c;查詢語言就像人與數據溝通的橋梁。 如何高效地獲取、操作和理解數據&#xff0c;取決于查詢語言的演進。 自20世紀70年代關系型數據庫興起以來&#xff0c;SQL&#xff08;Structured Query Language&#xff0…

AgentThink:一種在自動駕駛視覺語言模型中用于工具增強鏈式思維推理的統一框架

文章目錄摘要1. 引言2. 相關工作2.1 自動駕駛中的語言模型2.2 自動駕駛中的視覺問答3. 方法3.1 數據生成流水線3.2 兩階段訓練流程3.2.1 基于 SFT 的推理預熱3.2.2 基于 RLFT 的推理增強3.3 推理與評估4. 實驗4.1 主要實驗結果4.2 工具使用分析4.3 消融實驗4.4 泛化性評估5. 結…

Bug 排查日記:打造高效問題定位與解決的技術秘籍

一、引言在軟件開發的漫漫征程中&#xff0c;Bug 如影隨形&#xff0c;成為開發者們必須跨越的一道道障礙。它們或如微小的瑕疵&#xff0c;影響用戶體驗&#xff1b;或似隱藏的炸彈&#xff0c;引發系統故障&#xff0c;導致嚴重后果。高效排查 Bug&#xff0c;不僅是保障軟件…

使用 Sentry 為 PHP 和 Web 移動小程序提供多平臺錯誤監控

今天我在 reddit 上看到 Sentry 的推廣&#xff0c;想到 19 年我第一次在公司自研產品b2b2c上使用 Sentry 的經歷&#xff0c;后面在其他項目上多次使用Sentry&#xff0c;今天就順手分享一下在 Laravel 項目中接入 Sentry 的實踐心得。現代項目往往涉及 Web、移動端和小程序&a…

Python包管理工具全對比:pip、conda、Poetry、uv、Flit深度解析

在Python開發中&#xff0c;包的管理和使用是重要環節&#xff0c;現如今python包管理工具眾多&#xff0c;如何選擇合適的管理工具&#xff1f;常用的工具有pip、conda、Poetry、uv、Flit&#xff0c;下面這些工具進行詳細對比分析。一、工具概覽對比工具類型開發者主要特點適…

車載診斷架構 --- Service 14一丟丟小匯總

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做你把時間花在哪里,你的人生就在哪里。千萬別看見別人發光,就覺得自己暗淡。人生如逆旅,你我皆行人。唯有不斷閱己、越己、悅己才能活出生命的意…

Struts2 工作總結

一 in&#xff0c;在SQL中&#xff0c;IN 是一個條件操作符&#xff0c;用于指定多個可能的值&#xff0c;通常用在 WHERE 子句中。它的作用是檢查某個字段的值是否在給定的值列表中&#xff0c;相當于多個 OR 條件的簡寫形式。不使用 IN&#xff08;冗長&#xff09;SELECT * …

MQTT 認證與授權機制實踐(二)

四、實戰案例&#xff1a;主流 Broker 的認證授權配置指南&#xff08;一&#xff09;EMQ X&#xff1a;企業級物聯網 Broker 的安全方案1. 認證配置&#xff08;用戶名密碼 證書&#xff09;EMQ X 作為一款企業級物聯網 Broker&#xff0c;在安全認證方面提供了豐富且靈活的配…

多路轉接介紹及代碼實現

目錄 1.多路轉接技術的產生背景 2.select 3.poll 3.epoll 1.多路轉接技術的產生背景 一個技術的出現必然有它要解決的問題,那么多路轉接解決的問題是什么嗯? 我們知道,一個進程里面有一個文件描述符表管理這個進程所打開的文件,我們進行網絡通信的時候,本質就是創建一個…

《sklearn機器學習——回歸指標1》

skearn.metrics模塊實現一些損失函數&#xff0c;評分&#xff0c;并且應用函數去測度回歸標簽。其中一些已經改進&#xff0c;可以處理多指標案例&#xff1a;mean_squared_error&#xff0c;mean_absolute_error&#xff0c;explained_variance_score和r2_score。 這些函數使…

消息存儲機制-索引文件及頁緩存

對于生產者來說&#xff0c;將消息寫到commit log文件里面。這里會有消息的邏輯隊列&#xff0c;邏輯隊列里面保存了消息的偏移量。除了consumerquenue之外&#xff0c;它還會將數據分發到另外一個文件叫indexfile索引文件里面。這個索引文件可以保存消息的一些信息&#xff0c…