FPGA乒乓操作及串并转换设计篇

合集下载

fpga 乒乓球游戏机

fpga 乒乓球游戏机

基于FPGA的乒乓球游戏机设计Design of the table tennis game based on FPGA摘要FPGA在复杂逻辑电路以及数字信号处理领域中扮演越来越重要的角色。

FPGA有很高的数据处理速度,这就为我们处理高速信号提供了便利条件。

本次设计是以示波器为显示器,基于FPGA构造一个乒乓球游戏机。

用FPGA产生两组PWM波,通过两条I/O口线将信号传给RC低通滤波器,取出PWM信号的均值电压,输给示波器的XY模式。

这样我们就可以在示波器上观察到一亮点移动。

同时设置了计分机制,得分在七段数码管上显示双方得分。

关键字:FPGA Verilog 乒乓球游戏机AbstractFPGA in complex logic circuit and digital signal processing technology plays an increasingly important role.FPGA has very high data processing speed, this is for us to deal with high speed signal to provide convenient conditions. The design is based on the oscilloscope display, based on the FPGA structure of a table tennis ball game machine. Using FPGA to generate a two set of PWM wave, by two I / O line transmits a signal to the RC low-pass filter, remove the PWM signal of the average voltage, lost to the XY model. So that we can in the oscilloscope to observe an window mobile. By setting the button to generate the control signal, transmitted to the FPGA and the bright spot motion control. At the same time set a scoring mechanism, scoring in the seven digital tube display the scores of both parties.Keyword: FPGA Verilog table tennis game目录摘要 (2)Abstract (3)第一章设计任务与要求 (5)1.1设计任务 (5)1.2基本要求和扩展指标 (5)第二章系统总体设计 (6)2.1理论分析与计算 (6)2.1.1 PWM 调制原理 (6)2.1.2 理论计算 (6)2.2系统总体框图 (7)第三章电路分析与模块设计 (9)3.1低通滤波电路 (9)3.2增益放大电路 (9)3.3按键击球得分控制 (10)3.4七段数码管显示 (10)第四章系统软件设计 (12)4.1系统软件总体设计 (12)4.2判断显示函数 (13)附录一:硬件原理图 (15)附录二:程序清单 (16)第一章设计任务与要求1.1设计任务通过FPGA开发平台构造一台乒乓球游戏机。

基于fpga乒乓游戏设计方案

基于fpga乒乓游戏设计方案

基于fpga乒乓游戏的设计方案第一章概论1.1 制作动机相信許多人童年时代都是在玩小游戏中长大,例如: 贪吃蛇、超级玛丽、魔术方块等等。

很多这些游戏都是在软件的平台上实现的,因此,我想尝试用硬件来做一个比较简单的小游戏,如乒乓游戏。

1.2 制作目标实际来做乒乓游戏:通过vga显示球台、控制两个木板和一个小球,实现基本的乒乓游戏功能,再加上板子、球、球速。

然后再搭配上硬体加速的功能,提高整体运作的效能,如此一来,游戏的实时性更加显著。

整个项目主要分为三个模块:球台、木板、球的显示产生模块、颜色选择及调整模块、vga控制器模块。

第二章顶层设计2.1游戏规则通过按键对木板和球的移动进行控制,并且对球速进行选择,球在比赛双方进行移动,如果没有接到球的一方将会输掉比赛。

2.2 木板、球位置的确定和显示木板的位置确定,可以通过确定其左上角的点作为坐标,并预先确定好木板的长度和宽度;通过按键来对左上角的x和y坐标进行偏移,从而实现对木板的位置的确定。

球的位置确定,则是通过确定其球心的位置,并预习确定好球的半径;通过按键来对球心的x和y坐标进行偏移,从而实现对球的位置的确定。

由于球台和木板是矩形,所以显示是很简单的;但对于球的显示:assign Delta_X2 = (VGA_X-Ball_X)*(VGA_X-Ball_X);assign Delta_Y2 = (VGA_Y-{1'b0,Ball_Y})*(VGA_Y-{1'b0,Ball_Y}); assign Delta2=Delta_X2+Delta_Y2;assign R2 =({2'b00,Ball_S})*({2'b00,Ball_S});assign Ball_Show = (Delta2<= R2)?1'b1:1'b0;则是通过位置点的x和y坐标与球心的x和y坐标对应的差的平方和与球半径的平方进行比较,然后确定该位置是否属于圆内,从而确定是否要显示。

基于FPGA乒乓球游戏机Verilog设计

基于FPGA乒乓球游戏机Verilog设计

题目基于FPGA乒乓球游戏机Verilog设计学院通信工程专业班级通信081班学生姓名大彬哥指导教师大力会2013年6月12日摘要本文使用FPGA 芯片来模拟实际的乒乓球游戏。

本设计是基于Altera 公司的FPGA Cyclone II 芯片EP2C5T144C8 的基础上实现,运用Verilog HDL 语言编程,在Quartus II 软件上进行编译、仿真,最终在开发板上成功实现下载和调试关键词:编译仿真AbstractThis paper uses the FPGA chip to simulate the actual table tennis game. The design is based on Altera company Implementation of FPGA Cyclone based on II chip EP2C5T144C8, using Verilog HDL programming language, compile, simulation in Quartus IIsoftware, finally successfully in the development board download and debugKeywords: Compile;Simulation目录摘要 (I)Abstract (II)第1章绪论 (1)1.1 概述 (1)1.2Verilog 语言介绍 (1)1.2.1 Verilog 语言的用途 (2)1.2.2 Verilog 的历史 (2)1.2.3 Verilog 模块 (2)1.3 本文研究的意义 (3)第2章Verilog的基本理论 (4)2.1 Verilog模块的定义 (4)2.2Verilog模块的组成 (4)2.3 EP2C5T144C8芯片简介 (5)2.3.1 EP2C8开发板功能 (5)2.3.2开发板功能描述 (6)2.3.3EP2C5T144C8芯片的引脚图 (6)2.4 Verilog硬件描述语言的主要能力 (6)第3章乒乓球游戏机的软件设计 (8)3.1 乒乓球游戏机系统组成 (8)3.1.2功能模块设计 (8)3.2 发球权控制器 (9)3.3乒乓球位置控制 (10)3.3.1基于FPGA乒乓球比赛游戏机顶层原理图 (12)结论 (13)参考文献 (14)附录 (15)第1章绪论1.1 概述随着低复杂度FPGA器件成本的不断下降,具有灵活性和及时面市优势的FPGA与ASIC相比更有竞争性,在数字消费市场上的应用也急剧增加。

基于FPGA的乒乓球游戏机设计

基于FPGA的乒乓球游戏机设计

基于FPGA的乒乓球游戏机设计基于FPGA的乒乓球游戏机设计在现代电子设计领域,微电子技术迅猛发展,无论是系统设计、电路设计,还是芯片设计,其设计的复杂度都在增加,传统的手工设计方法已经不能满足设计者的要求,急需新的设计工具来解决。

EDA技术的迅速发展顺应了时代的发展,使得电子设计自动化技术有了新的、快的发展,其重要程度日益突出。

本文设计了基于FPGA的,用Verilog HDL语言描述的乒乓球游戏机的设计。

它由控制模块、数码管的片选信号模块、送数据模块和7段译码器模块组成,连接形成乒乓球游戏机的顶层电路。

在QuartusⅡ软件上用Verilog HDL语言分别对每个模块进行描述,然后在软件上进行编译、仿真,最终实现乓乓球比赛的基本过程和规则,并能自动裁判和计分,达到设计的要求。

关键词:EDA ;FPGA ;Verilog HDL AbstractIn the field of modern electronic design, the rapid development of microelectronictechnology,whether the system design, circuit design and chip design, the design is more complex, the traditional manual design methods have been unable to meet therequirements of designers,in urgent need of new design tools to solve. The rapiddevelopment of EDA technology to the development of the times, the electronic design automation technology has been the development of new, fast, its importance isoutstanding day by day. This paper is designed based on FPGA, the designof table tennis game is described with Verilog HDL language. It consists of control module, chip select signal module, digital tube to send data module and the 7 segmentdecoder modules, the top-level circuit connected to form a table tennis game. In the Quartus software by Verilog HDL language for each module are described, and then the compiler, simulation in software, realize the basic process and the rules of tabletennis table tennis competition, and can automatically judge and score, to meet the design requirements.Keywords: EDA; FPGA; Verilog HDL1.1课题研究的背景随着微电子技术的飞跃发展,无论是系统级设计、电路设计还是芯片设计,它的复杂程度都在不断的增加,而且它的发展速度也越来越快。

FPGA设计的四种常用思想与技巧乒乓操作

FPGA设计的四种常用思想与技巧乒乓操作

FPGA设计的四种常用思想与技巧乒乓操作FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,可以根据需要重新配置其内部硬件电路。

在FPGA设计中,有许多常用的思想和技巧,其中之一就是乒乓操作。

乒乓操作是指通过交替使用两个资源或状态来实现其中一种功能或优化设计的一种方法。

本文将介绍FPGA设计中的四种常用思想与技巧乒乓操作。

1.数据缓冲乒乓操作:数据缓冲乒乓操作是指在设计中使用两个缓冲区交替存储数据。

一个缓冲区用于接收数据,另一个缓冲区用于处理数据。

当一个缓冲区正在接收数据时,另一个缓冲区可以同时进行数据处理。

这种乒乓操作可以提高数据处理的效率,减少数据处理的延迟。

2.时钟域乒乓操作:时钟域乒乓操作是指在设计中使用两个时钟域交替操作。

一个时钟域用于采样输入数据,另一个时钟域用于处理数据。

这种乒乓操作可以实现不同时钟域之间的数据交换和同步。

例如,可以将输入数据从一个时钟域同步到另一个时钟域,然后再进行处理。

这种乒乓操作可以解决时钟域之间的异步问题,提高设计的可靠性和性能。

3.状态机乒乓操作:状态机乒乓操作是指在设计中使用两个状态机交替执行其中一种功能。

一个状态机用于执行一些任务,另一个状态机用于处理其他任务。

这种乒乓操作可以实现多任务的并行处理。

例如,可以将一个状态机用于处理输入数据,另一个状态机用于处理输出数据。

这种乒乓操作可以提高设计的并行度,加快任务的执行速度。

4.存储器乒乓操作:存储器乒乓操作是指在设计中使用两个存储器交替读写数据。

一个存储器用于读取数据,另一个存储器用于写入数据。

这种乒乓操作可以实现数据的连续读写,提高存储器的访问效率。

例如,可以将一个存储器用于读取输入数据,另一个存储器用于写入输出数据。

这种乒乓操作可以减少存储器的读写延迟,提高数据的传输速度。

综上所述,FPGA设计中的乒乓操作是一种常用的思想和技巧,可以提高设计的效率和性能。

通过数据缓冲乒乓操作、时钟域乒乓操作、状态机乒乓操作和存储器乒乓操作,可以实现数据的并行处理、时钟域的同步、多任务的执行和存储器的高效访问。

FPGA乒乓球设计任务书

FPGA乒乓球设计任务书

游戏介绍1 游戏说明本次设计内容是一个乒乓球游戏,可以实现的主要功能如下:1、屏幕中央为一个绿色的乒乓球台,屏幕上方显示PONG GAME字样,乒乓球台左右各有两个球拍,屏幕左右两边的数字显示游戏双方的比分情况,最先达到11分的一方获得游戏胜利。

2、乒乓球台上的一个红色小点代表乒乓球,左侧球拍由BTN West和BTN South按键分别控制上下两个方向;右侧球拍由BTN North和BTN East按键分别控制上下两个方向,若其中一方没有接住球,则对方得一分。

3、游戏设有Start和Reset两个功能键,分别实现游戏开始和发生错误时的复位功能。

2 模块分配程序主要分为以下几个模块:(1)字符显示模块(2)球拍控制模块(3)乒乓球运动模块(4)VGA显示模块(5)主控模块2.1 字符显示模块此模块主要完成屏幕上字符和左右两侧比分的显示,模块内储存屏幕中像素对应的地址及该地址对应的数据,当函数输入为某一地址时,屏幕上则对应显示相应的字符或数字。

2.2 球拍控制模块球拍控制模块负责接收来自按键的输入,利用函数POS_X和POS_Y确定球拍的当前位置,然后根据输入的上移或下移信号将球拍的位置进行移动。

为了避免在按键按下或是抬起时电平剧烈抖动带来的影响,模块中加入了消抖程序。

2.3 乒乓球运动模块乒乓球运动模块主要负责控制乒乓球的运动轨迹,模块首先确定球拍的X坐标和Y 坐标以及乒乓球的X坐标和Y坐标并进行比较,根据比较结果判断球拍是否击中乒乓球,若球拍击中乒乓球,则乒乓球弹回,若球拍未击中乒乓球,则乒乓球回到中间位置开始一局新的游戏,对方得一分。

2.4 VGA显示模块VGA显示模块主要通过行扫描和帧扫描在显示屏上显示球台、球拍和球的图像。

2.5 主控模块主控模块主要负责整合其他模块,使各模块可以很好的协同工作。

3 模块组合图。

FPGA设计实践简易乒乓游戏机(精选五篇)

FPGA设计实践简易乒乓游戏机(精选五篇)

FPGA设计实践简易乒乓游戏机(精选五篇)第一篇:FPGA设计实践简易乒乓游戏机课程设计报告课程设计名称:FPGA设计实践设计课题名称:简易乒乓游戏机成绩简易乒乓游戏机设计报告一、设计目的:本课程的授课对象是电子科学与技术专业本科生,是电子类专业的一门重要的实践课程,是理论与实践相结合的重要环节。

本课程有助于培养学生的数字电路设计方法、掌握模块划分、工程设计思想与电路调试能力,为以后从事各种电路设计、制作与调试工作打下坚实的基础。

简易乒乓游戏机的实验目的:1.熟练掌握VHDL 语言和QuartusII 软件的使用;2.理解状态机的工作原理和设计方法;3.掌握利用EDA 工具进行自顶向下的电子系统设计方法;二、实验器材和工具软件:QUARTUS II。

三、设计内容:本课程要求学生以FPGA技术基础,以VHDL为语言,以QUARTUS II为工具,设计一个乒乓球游戏机。

四、设计具体步骤:乒乓球游戏机是一个经典的数字逻辑综合设计的题目,本题目中输入输出的信号较多,控制比较复杂,可以采用自上而下的设计方法。

首先,整体上设计本题目。

在理解题目的基础上,用图示的方法直观描述乒乓游戏机的外观和构成,明确所需要的硬件以及特点。

例乒乓游戏机的组成两人乒乓游戏机是用8个发光二极管代表乒乓球台,中间2发光二极管兼作球网,用点亮的发光二极管按一定的方向移动来表示球的运动。

在游戏机的两侧各设置两个开关,一个是发球开关发A发fB;另一个是击球开关jA,jB。

甲、乙二人按乒乓球比赛规则来操作开关。

当甲方按动发球开关fA时,靠近甲方的第1个发光二极管亮,然后发光二极管的甲向乙依次点亮,代表乒乓球的移动。

当球过网后按设计者规定的球位,乙方就可击球。

若乙方提前击球或没击着球,则判乙方失分,甲方的记分牌自动加分。

然后重新发球,比赛继续进行。

比赛一直要进行到一方记分牌达到11分,该局结束。

(3)完成各模块的代码编写:[1]分频模块,用与生成2HZ的技术频率library ieee;use ieee.std_logic_1164.all;entity clk_2 is port(clkin :in std_logic;clkout:out std_logic);end clk_2;architecture behave_clk_2 of clk_2 is constant N: Integer:=12499999;signal Counter:Integer RANGE 0 TO N;signal Clk: Std_Logic;begin process(clkin)begin if rising_edge(clkin)then if Counter=N then Counter<=0;Clk<=NOT Clk;else Counter<= Counter+1;end if;end if;end process;clkout<= Clk;end behave_clk_2 clk_2clkinclkoutinst7 [2]显示模块: library ieee;use ieee.std_logic_1164.all;entity translate3to7 is port(datain:in std_logic_vector(2 downto 0);dataout:out std_logic_vector(6 downto 0));end translate3to7;architecture behave OF translate3to7 is begin with datain(2 downto 0)select dataout <= “1000000” when “000” ,“1111001” when “001” ,“0100100” when “010” ,“0110000” when “011” ,“0011001” when “100” ,“0010010” when “101” ,“0000010” when “110” ,“1111000” when “111”;end behave;translate3to7datain[2..0]dataout[6..0]inst4 library ieee;use ieee.std_logic_1164.all;entity translate7to14 is port(data:in std_logic_vector(3 downto 0);outputH:out std_logic_vector(6 downto 0);outputL:out std_logic_vector(6 downto 0));end translate7to14;architecture behave_translate OF translate7to14 is begin with data(3 downto 0)select outputL <= “1000000” when “0000” ,“1111001” when “0001” ,“0100100” when “0010” ,“0110000” when “0011” ,“0011001” when “0100” ,“0010010” when “0101” ,“0000010” when “0110” ,“1111000” when “0111” ,“0000000” when “1000” ,“0010000” when “1001” ,“1000000” when “1010”,“1111001” when “1011”,“0100100” when “1100”,“0110000” when “1101”,“0011001” when “1110”,“0010010” when “1111”;wi th data(3 downto 0)select outputh <= “1000000” when “0000”,“1000000” when “0001”,“1000000” when “0010”,“1000000” when “0011”,“1000000” when “0100”,“1000000” when “0101”,“1000000” when “0110”,“1000000” when “0111”,“1000000” when “1000”,“1000000” when “1001”,“1111001” when “1010”,“1111001” when “1011”,“1111001” when “1100”,“1111001” when “1101”,“1111001” when “1110”,“1111001” when “1111”;end behave_translate;translate7to14data[3..0]outputH[6..0]outputL[6 ..0]inst23 library ieee;use ieee.std_logic_1164.all;entity translate3to8 is port(datain:in std_logic_vector(2 downto 0);dataout:out std_logic_vector(7 downto 0));end translate3to8;architecture behave OF translate3to8 is begin when “000”=> dataout <=“11111110”;when “001”=> dataout <=“11111101”;when “010”=> dat aout<=“11111011”;when “011”=> dataout <=“11110111”;when “100”=> dataout <=“11101111”;when “101”=> dataout <=“11011111”;when “110”=> dataout <=“10111111”;when “111”=> dataout <=“01111111”;when others => dataout <=“11111111”;end behave;translate3to8datain[2..0]dataout0dataout1dataout2data out3dataout4dataout5dataout6dataout7inst26(4)各模块调试和波形(5)状态图:五、设计收获以及存在的问题:1在此次实验中要用到计数器编程中往往要学会引用变量,因为信号容易产生延迟。

基于FPGA乒乓球游戏

基于FPGA乒乓球游戏

基于FPGA的乒乓球游戏的设计与实现引言FPGA(FieldProgrammableGateArray),现场可编程门阵列。

它是继PAL、GAL、CPLD等可编程器件的基础上进一步发展的成果。

它作为专用集成电路(ASIC)领域中的一种半定制电路,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

作为一种可编程器件,FPGA与传统的数字电路和门电路相比,它采用逻辑单元阵列的模式,内部包含有可配置逻辑模块、输出输入模块和内部连线三个部分。

通过硬件描述语言(如VHDL语言)完成的电路设计,可以通过综合与布局,快速烧录至FPGA芯片上进行测试。

SOPC(SystemOnProgrammableChip),可编程片上系统。

它是用可编程逻辑技术把整个系统放到一块硅片上,用于从事嵌入式系统的系统研究和电子测量处理等领域。

SOPC是一种特殊的嵌入式系统,它既是片上系统(SOC),即由单个芯片完成整个系统的主要逻辑功能,但它又不是简单的SOC,也是可编程系统,具有灵活的设计方式,可裁剪、可扩充、可升级,并具备软硬件在系统可编程的功能。

1乒乓球游戏玩法介绍将双通道示波器作为显示屏。

将两路信号输入示波器中,让示波器工作在X/Y模式。

单片机实验板上的两个按钮作为控制键分别用于左击球和右击球,当小球接近屏幕左边时按下左击球可将球击回右侧,右侧击球亦然。

小球可以按照一定的抛物线轨迹自动在屏幕上左右运动,连续按下两次击球键能够击出高抛球,使球飞行距离增高。

当球接触到屏幕边沿而未按下击球键则被判定为输球。

2实验器件CycloneIII(EP3C10E144C8)FPGA实验板,单片机P89V51实验板(含按键显示屏等),电阻导线若干。

Altera公司生产的CycloneIIIFPGA芯片具有低功耗、低成本和高性能等特点。

其体系结构包括高达120K的垂直排列逻辑单元(LE)、以9-Kbit(M9K)模块构成的4Mbits嵌入式存储器、200个18x18的嵌入式乘法器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FPGA/CPLD重要设计思想及工程应用
乒乓操作及串并转换设计篇
概述
“乒乓操作”是一个常常应用于数据流控制的处理技巧,典型的乒乓操作方法如下图所示。

乒乓操作的处理流程
输入数据流通过“输入数据选择单元”将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口RAM(DPRAM) 、单口RAM(SPRAM) 、FIFO等。

在第一个缓冲周期,将输入的数据流缓存到“数据缓冲模块1”。

在第2 个缓冲周期,通过“输入数据选择单元”的切换,将输入的数据流缓存到“数据缓冲模块2”,同时将“数据缓冲模块1”缓存的第1 个周期数据通过“输出数据选择单元”的选择,送到“数据流运算处理模块”进行运算处理。

在第3 个缓冲周期通过“输入数据选择单元”的再次切换,将输入的数据流缓存到“数据缓冲模块1”,同时将“数据缓冲模块2”缓存的第2 个周期的数据通过“输出数据选择单元”切换,送到“数据流运算处理模块”进行运算处理。

如此循环。

利用乒乓操作完成数据的无缝缓冲与处理
乒乓操作可以通过“输入数据选择单元”和“输出数据选择单元”按节拍、相互配合的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理模块”进行运算与处理。

把乒乓操作模块当做一个整体,站在这个模块的两端看数据,输入数据流和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数据流进行流水线式处理。

所以乒乓操作常常应用于流水线设计中,完成数据的无缝缓冲与处理。

串并转换
串并转换是FPGA 设计的一个重要技巧,它是高速数据流处理的常用手段,串并转换的实现方法多种多样,根据数据的排序和数量的要求,可以选用寄存器、双口RAM(DPRAM) 、单口RAM(SPRAM) 、FIFO 等实现。

若想数据的缓冲区开得很大,可以通过DPRAM 实现了数据流的串并转换,对于数量比较小的设计可以采用寄存器完成串并转换。

如无特殊需求,系统中应该用同步时序设计完成串并之间的转换。

那么在工程应用中,程序里怎么才能体现出串并转换设计的思想呢?怎么才能提高系统的处理速度呢?我们可以先来做一个串并转换的框架型设计。

这个章节老师没有给留下什么固定题目,所以自己构思起来也有点麻烦。

想来想去就做个串入并出的设计吧。

设计的思想是这样的,有一组数据以50MHZ的速率从FPGA的一个I/O口传入,要实现在FPGA的另一端8个I/O口以50/8MHZ的速率把传入的速率吐出。

也就是说每隔8个主时钟周期要从8个输出口输出从输入口输入的8个数据。

功能仿真的波形如下:
如图,从rst完成复位(拉低)并且输入使能信号en置位(拉高)后输入的数据(头8个时钟周期)为10101010,在第9个时钟周期,输出使能信号en_out 拉高了,说明此时可以从8位并行数据输出口取数了,data_out的输出16进制aa正好就是输入的10101010,所以第一个数据的串并转换正确无误。

往后输入11110000,输出是16进制f0也没错……
该程序实现了串并转换的要求,这样原来50MH速率传送的数据经过FPGA串并转换后只要用1/8的时钟频率就能完成数据流的传输,也可以说这是一个面积换速度的典型。

程序:
module sp_top(scl,rst,en,sda,data_out,en_out);
input scl;//50MHz主时钟信号
input rst;//复位信号,高有效
input en;//数据输入使能,高有效
input sda;//串行输入数据
output[7:0] data_out;//并行输出数据
output en_out;//输出使能信号,高有效
wire[7:0] data_reg;//并行输出数据寄存器
wire rdy;
series_in series_in(scl,rst,en,sda,data_reg,rdy);
parallel_out parallel_out(scl,rst,data_reg,rdy,data_out,en_out); endmodule
module series_in(scl,rst,en,sda,data_reg,rdy);
input scl;
input rst;
input en;
input sda;
output[7:0] data_reg;
output rdy;
reg[7:0] data_reg;
reg[2:0] i;
reg rdy;
always @ ( posedge scl )
begin
if(rst) begin i <= 3'd0; data_reg <= 8'dz; rdy <= 0; end
else if(en)
begin
data_reg <= {data_reg[6:0],sda};
i <= i+1;
if(i==3'd7) rdy <= 1;
else rdy <= 0;
end
else begin i <= 3'd0; data_reg <= 8'dz; rdy <= 0; end
end
endmodule
module parallel_out(scl,rst,data_reg,rdy,data_out,en_out);
input scl;
input rst;
input[7:0] data_reg;
input rdy;
output[7:0] data_out;
output en_out;
reg[7:0] data_out;
reg en_out;
always @ ( posedge scl )
begin
if(rst) begin data_out <= 8'dz; en_out <= 0; end
else if(rdy) begin data_out <= data_reg; en_out <= 1; end
else begin data_out <= 8'dz; en_out <=0; end
end
endmodule。

相关文档
最新文档