1.仿真预览

2.理论分析

标准的硬件系统图像显示流程如下:

但是在仿真阶段,为了验证USB的功能,我们需要对系统的工作模式做下调整,使得符合仿真使用。具体如下所示:

注意,由于摄像机,在仿真阶段,没法获得实际的图片,我们这里通过摄像机驱动,驱动我们的存储器中的图片输出图像。然后将图像数据通过USB进行输出,并在modelsim仿真过程中,将仿真数据保存,然后用matlab对仿真数据进行解析,得到图像,从而验证USB接口的正确性。

然后配置上,还包括CY7C68013芯片的配置两个部分。

注意,由于我们将测试图片,做到FPGA的缓存中用于仿真了,实际下载硬件这个环节是没有的,所以这个做法会导致资源不够,所以再编译的时候按点如下安健:

(所以,我们这里采用图片大小是600*800的,原始相机3000多扫描,FPGA仿真会非常非常非常非常非常慢,所以这里用较小的图片,然后后面提供的matlab成像软件,还是按照扫描模式来成像的。)

即第二个安健,这个安健是只针对仿真的综合过程,

第一个安健是下载硬件的安健,这里由于设置了缓存,所以肯定会资源不够,所以不用点这个安健。

下面介绍USB接口的定义:

1.USB时钟,

2.复位信号,

3.图像数据输入到USB接口,这个接口要加入FIFO

4.USB中断信号输入

5.USB读写使能信号

6.USB输出到电脑的接口,外部接口,这个接口要加入FIFO

7.输入信号触发信号

---------------------------------------------------------------------------------------------------

运行QII12.1版本软件,

首先可以看到系统的RTL结构图

进行modelsim仿真,得到如下的仿真结果:

仿真之后会产生,这个文件在

打开这个文件,将前面多个xx删除,然后复制到matlab文件夹

然后用matlab软件进行数据还原

双击读取数据,然后再点击显示图像,得到如下结果:

说明USB数据接口成功。

3.部分核心代码

`timescale 1ns / 10psmodule tops(i_clk,i_rst,clk1,clk2,o_R_ccd,o_G_ccd,o_B_ccd,o_RGB,o_hang_plus,//usb fifo ino_data_fifo_in,o_almost_full_in,o_full_in,o_empty_in,o_usedw_in,//USB outputo_wr_en,o_usb_start,o_USB_dout,o_rec_dat,o_rec_done,//usb fifo outo_data_fifo_o,o_almost_full_o,o_full_o,o_empty_o,o_usedw_o,SampleEnd,ifclk,slwr,slcs,PKTEND,addr0,addr1,flagb_led,flagc_led,flaga_led,slrd,sloe,stop,fifo_data);input      i_clk;
input      i_rst;
output     clk1;
output     clk2;
output[7:0]o_R_ccd;
output[7:0]o_G_ccd;
output[7:0]o_B_ccd;
output[7:0]o_RGB;
output     o_hang_plus;output[7:0]o_data_fifo_in;
output     o_almost_full_in;
output     o_full_in;
output     o_empty_in;
output[9:0]o_usedw_in;output     o_wr_en;
output     o_usb_start;
output[7:0]o_USB_dout;
output[7:0]o_rec_dat;
output     o_rec_done;output[7:0]o_data_fifo_o;
output     o_almost_full_o;
output     o_full_o;
output     o_empty_o;
output[9:0]o_usedw_o;output SampleEnd;
output ifclk;
output slwr;
output slcs;
output PKTEND;
output addr0;
output addr1;
output flagb_led;
output flagc_led;
output flaga_led;
output slrd;
output sloe;
output stop;
output[7:0] fifo_data;//clk 3divider
//clk 3divider
//clk 3divider
//clk 3divider
//clk 3divider
//clk 3divider
//clk 3divider
//clk 3divider
reg[3:0]cnt;
reg     clk1;
reg     clk2;
always @(posedge i_clk or posedge i_rst)
beginif(i_rst)begincnt  <= 4'd0;clk1 <= 1'b0;clk2 <= 1'b0;end
else beginif(cnt==4'd6)cnt <= 4'd1;elsecnt <= cnt + 4'd1; if(cnt == 4'd1) clk1 <= 1'b1;elseclk1 <= 1'b0;if(cnt == 4'd1 | cnt == 4'd3  | cnt == 4'd5 ) clk2 <= 1'b1;elseclk2 <= 1'b0;           end
end//Images buffer to define the CCD
//Images buffer to define the CCD
//Images buffer to define the CCD
//Images buffer to define the CCD
//Images buffer to define the CCD
//Images buffer to define the CCD
//Images buffer to define the CCD
//Images buffer to define the CCD
//Images buffer to define the CCD
images_buffer uut(.i_clk1  (clk1),.i_clk2  (clk2),.i_rst   (i_rst),.i_ren   (1'b1), .o_R     (o_R_ccd),.o_G     (o_G_ccd),.o_B     (o_B_ccd),.o_image (o_RGB),.o_hang_plus(o_hang_plus)//逐行输出扫描,hangplus为行信号,标注每一行的信息);//USB interface******************************************************************************************************
//USB interface******************************************************************************************************
//USB interface******************************************************************************************************
//USB interface******************************************************************************************************
//USB interface******************************************************************************************************
//USB interface******************************************************************************************************
//USB interface******************************************************************************************************
//USB interface******************************************************************************************************//USB Controller
wire w_i;
wire r_i;
wire w_o;
wire r_o;
USB_send_controller ut4(.clk2 (clk2),.i_rst(i_rst),.w_i  (w_i),.r_i  (r_i),.w_o  (w_o),.r_o  (r_o));//fifo input
fifo_io fifo_io_u1(.aclr       (i_rst),.clock      (clk2),.data       (o_RGB),.rdreq      (r_i),.wrreq      (w_i),.almost_full(o_almost_full_in),.empty      (o_empty_in),.full       (o_full_in),.q          (o_data_fifo_in),.usedw      (o_usedw_in));//usb interface
usb_top usb_top_u(.i_clk            (clk2),      .i_rst            (i_rst),//USB中断控制输入信号.i_usb_interrupt  (1'b0),     //USB发送数据控制指令.i_trans_start    (1'b1),   //usb输入.i_USB_din        (o_data_fifo_in),    //输入发送数据长度 .i_USB_len        (8'd8),//write输出.o_wr_en          (o_wr_en), //read输出        .o_rd_en          (o_usb_start),         //usb输出.o_USB_dout       (o_USB_dout),      //输出数据.o_rec_dat        (o_rec_dat),     //接收完成标志.o_rec_done       (o_rec_done)      );//fifo output
fifo_io fifo_io_u2(.aclr       (i_rst),.clock      (clk2),.data       (o_USB_dout),.rdreq      (r_o),.wrreq      (w_o),.almost_full(o_almost_full_o),.empty      (o_empty_o),.full       (o_full_o),.q          (o_data_fifo_o),.usedw      (o_usedw_o));//CY7C68013驱动芯片的配置
wire SampleEnd;
wire ifclk;
wire slwr;
wire slcs;
wire PKTEND;
wire addr0;
wire addr1;
wire flagb_led;
wire flagc_led;
wire flaga_led;
wire slrd;
wire sloe;
wire stop;
wire[7:0] fifo_data;
CY7C68013_setup CY7C68013_setup_u
(.START(o_usb_start) ,  // input  START_sig.flaga(1'b1) ,  // input  flaga_sig.flagb(1'b1) ,  // input  flagb_sig.flagc(1'b1) ,  // input  flagc_sig.clkin(clk2) ,   // input  clkin_sig.SampleEnd(SampleEnd) ,  // output  SampleEnd_sig.ifclk    (ifclk) , // output  ifclk_sig.slwr     (slwr) ,  // output  slwr_sig.slcs     (slcs) ,   // output  slcs_sig.PKTEND   (PKTEND) , // output  PKTEND_sig.addr0    (addr0) ,    // output  addr0_sig.addr1    (addr1) , // output  addr1_sig.flagb_led(flagb_led) , // output  flagb_led_sig.flagc_led(flagc_led) , // output  flagc_led_sig.flaga_led(flaga_led) , // output  flaga_led_sig.slrd     (slrd) ,  // output  slrd_sig.sloe     (sloe) ,   // output  sloe_sig.stop     (stop) ,   // output  stop_sig.fifo_data(fifo_data)    // output [7:0] fifo_data_sig
);endmodule 
function varargout = tops(varargin)gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @tops_OpeningFcn, ...'gui_OutputFcn',  @tops_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before tops is made visible.
function tops_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to tops (see VARARGIN)% Choose default command line output for tops
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes tops wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = tops_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global R1;
global G1;
global B1;
global I;
load data.txt
Len= 158;
R1 = [zeros(Len,1);data(2:3:2+3*480000-1-3*Len)];
G1 = [zeros(Len,1);data(3:3:3+3*480000-1-3*Len)];
B1 = [zeros(Len,1);data(4:3:4+3*480000-1-3*Len)];I(:,:,1) = [reshape(R1',[800,600])]';%一共产生600个行信息,扫描成像,我将扫描的效果给你放慢做出来了
I(:,:,2) = [reshape(G1',[800,600])]';
I(:,:,3) = [reshape(B1',[800,600])]';
msgbox('读取完毕');% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global R1;
global G1;
global B1;
global I;
axes(handles.axes1);
I2 = zeros(size(I));
KK=15;
for i = 1:600/KK
I2(KK*(i-1)+1:KK*i,:,1) = I(KK*(i-1)+1:KK*i,:,1);
I2(KK*(i-1)+1:KK*i,:,2) = I(KK*(i-1)+1:KK*i,:,2);
I2(KK*(i-1)+1:KK*i,:,3) = I(KK*(i-1)+1:KK*i,:,3);
imshow(uint8(I2));
hold off
drawnow;
end
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
clc;
clear;
close all;

A38-08

通过FPGA实现USB接口传输图片,通过MATLAB对图片进行显示相关推荐

  1. 基于FPGA的USB接口控制器设计(VHDL)(中)

    今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇.今天带来第二篇,中篇,USB通信原理.USB 系统开发以及设计实例.话不多说,上货. 之前有关于 Veril ...

  2. 基于FPGA的USB接口控制器设计(VHDL)(上)

    今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇.今天带来第一篇,上篇,USB 接口简介 以及 USB 体系结构.话不多说,上货. 之前有关于 Verilio ...

  3. usb转ttl模块与matlab,USB接口转TTL小板的自检测试

    现在电脑基本上都不会配置DB9串行数据端口了,这给一些喜欢折腾刷机和单片机加载程序的朋友带来了诸多的不便.还好,随着技术的发展,USB接口转TTL的产品越来越成熟,而这种产品主要以采用PL-2303H ...

  4. 利用FPGA实现外设通信接口之:利用FPGA实现USB 2.0通信接口

    10.3  利用FPGA实现USB 2.0通信接口 10.3.1  USB 2.0接口的实现方式 利用FPGA来实现USB 2.0接口的方式一般有两种,一是借助外围的USB接口芯片,二是FPGA内部实 ...

  5. 基于FPGA的UART接口协议设计

    一.PC终端概述 PC终端,Personal Computer 智能终端,通俗的讲,就是利用电脑GUI界面控制我们的外部硬件电路. 因此设计到了PC与外部硬件电路的通信接口.对于台式电脑.个人笔记本, ...

  6. ft232h引脚_一种基于芯片ft232h的usb接口电路的制作方法

    一种基于芯片ft232h的usb接口电路的制作方法 [技术领域] [0001 ] 本实用新型涉及一种USB接口电路,具体涉及一种基于芯片FT232H的USB接口电路. [背景技术] [0002]USB ...

  7. 基于FPGA的USB高速数据采集系统(免做上位机)

    本篇分享基于FPGA的USB高速数据采集系统,上位机软件采用赛普拉斯官方提供的上位机软件,实现前端AD的采集,经过FPGA处理之后通过USB传输到上位机,将数据保存下来,然后通过MATLAB可以将AD ...

  8. 基于FPGA的PCIe接口实现(具体讲解了数据流向)

    转载自:https://www.cnblogs.com/chengqi521/p/7094544.html 时间:2014-12-09 来源:西安电子科技大学电子工程学院 作者:姜 宁,陈建春,王 沛 ...

  9. FPGA模拟PS2接口的方法

    FPGA模拟PS2接口的方法 本来以为模拟PS2协议相当的麻烦,今天下了一本PS2协议手册看了半天,原来读键盘值相当简单嘛,比模拟SPI.I2C简单多了呵呵. 下面介绍一下具体过程 1.明确接线关系, ...

最新文章

  1. RecycleView分割线
  2. 与uefi_UEFI + GPT 启动 VHD
  3. Hibernate学习(二)
  4. 依赖注入_set方法注入_构造器注入
  5. php读取移动硬盘数据,移动硬盘打不开,数据怎么恢复?
  6. applicationContext.xml文件配置模板
  7. 冷知识 —— 地名的解释
  8. Java数据结构——二叉树
  9. 开题报告、论文摘要、摘要翻译、论文结论怎么写?
  10. docker-the input device is not a TTY. If you are using mintty, try prefixing the command with ‘winp
  11. 网站访问量统计 | hexo
  12. Springboot+微信小程序自习室管理系统毕业设计源码221535
  13. 偏门赚钱日赚1000,这个创业项目我本来不想说的....
  14. Preserving Semantic Neighborhoods for RobustCross-modal Retrieval
  15. Mac 配置 docker 基本操作
  16. 拒绝调包 手写实现神经网络(复习专用)
  17. 1.30.Flink SQL案例将Kafka数据写入hive
  18. 利用python将中文名转换为英文名
  19. 计算机求职简历考试题题大学,大学计算机基础上机实验指导与习题,word的设计性实-个人简历.docx...
  20. 消息中间件MQ及ActiveMQ介绍

热门文章

  1. Java初学者问道:Java IDE选择
  2. javaWeb前端网页课程设计的实现——【JAVA篇】
  3. Oracle的最高认证并不是OCM,而是......
  4. ras加密 java_浅析RAS算法的保密性能
  5. Arch Linux下的外接显示器
  6. Java的自学之旅14
  7. 【安卓开发】Android中日期选择器DatePicker和TimePicker的使用
  8. 软件noarch版本的含义:是no architecture的缩写
  9. GNSS基本概念(1):仰角和方位角(Elevation and Azimuth)
  10. ----Move on-----