数据流中,用面积换速度-串行转并行的操作

并行转串行数据输出:采用计数方法,将并行的数据的总数先表示出来,然后发送一位数据减一,后面的接收的这样表示: data_out <= data[cnt];//cnt表示计数器

`timescale  1ns/1ns

module  p2s
(
input clk,
input rst_n,
input load,
input [:] pdata,
output sclk,
output sdat
);
`define FULL 'hf
reg [:] bitcnt;
reg en;
reg [:] sbuff;
always @(posedge clk or negedge rst_n)
if(!rst_n) en <= ;
else if(load) en <= 'b1;
else if(bitcnt==`FULL) en <= 'b0;
always @(posedge clk or negedge rst_n)
if(!rst_n) bitcnt <= ;
else if(en) bitcnt <= bitcnt + 'b1;
else bitcnt <= ;
assign sclk = bitcnt[];
always @(posedge clk or negedge rst_n)
if(!rst_n) sbuff <= 'b0;
else if(load) sbuff <= pdata;
else if(sclk) sbuff <= sbuff<<;
assign sdat = sbuff[];
endmodule

串行转并行数据输出:采用位拼接结束,将串行的数据总数先表示出来,然后发送一位数据加一,后面的接收的这样标志:data <= {data[6:0],data_out };------用过的74HC595

module SerialToParallel(
input CLK, //时钟
input RSTn, //复位
input Enable, //输入有效
input DataIn, //串行输入
output reg Ready, //输出有效
output[:] Index, //并行数据索引
output[:] ParallelData //并行数据输出
); reg[:] Data_Temp; //数据缓存
reg[:] counter; //位数计数器
reg[:] state; //状态机
reg[:] Index_Temp; //索引缓存 assign Index=Index_Temp;
assign ParallelData=Ready?Data_Temp:'d0; ////////////////////////////////////////
//state:
//4'd0:复位
//
//4'd1:未复位,未使能
//
//4'd2:未复位,输入使能
// always@(posedge CLK or negedge RSTn)
if(!RSTn)
begin
state<='d0; //复位
Ready<=;
counter<='d0;
Data_Temp<='d0;
Index_Temp<='d0;
end
else
begin
case(state)
'd0:
begin
if(!Enable)state<='d1;
else state<='d2;
Ready<=;
end
'd1:
begin
if(!Enable)state<='d1;
else state<='d2;
Ready<=;
counter<='d0;
Data_Temp<='d0;
end
'd2:
begin
if(!Enable)state<='d1;
else state<='d2;
case(counter)
'd0:begin Data_Temp[0]<=DataIn;counter<=counter + 1'b1;Ready<=;end
'd1:begin Data_Temp[1]<=DataIn;counter<=counter + 1'b1;Ready<=;end
'd2:begin Data_Temp[2]<=DataIn;counter<=counter + 1'b1;Ready<=;end
'd3:begin Data_Temp[3]<=DataIn;counter<=counter + 1'b1;Ready<=;end
'd4:begin Data_Temp[4]<=DataIn;counter<=counter + 1'b1;Ready<=;end
'd5:begin Data_Temp[5]<=DataIn;counter<=counter + 1'b1;Ready<=;end
'd6:begin Data_Temp[6]<=DataIn;counter<=counter + 1'b1;Ready<=;end
'd7:begin Data_Temp[7]<=DataIn;counter<=4'd0;Index_Temp<=Index_Temp + 'b1;Ready<=1'b1;end
endcase
end
endcase
end endmodule

FPGA设计思想之串并转换的更多相关文章

  1. FPGA设计思想与技巧(转载)

    题记:这个笔记不是特权同学自己整理的,特权同学只是对这个笔记做了一下完善,也忘了是从那DOWNLOAD来的,首先对整理者表示感谢.这些知识点确实都很实用,这些设计思想或者也可以说是经验吧,是很值得每一 ...

  2. 09A-独立按键消抖实验01——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.复习状态机的设计思想并以此为基础实现按键消抖 2.单bit异步信号同步化以及边沿检测 3.在激励文件中学会使用随机数发生函数$random 4.仿真模 ...

  3. 08-FPGA状态机设计实例——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的:1.学习状态机的相关概念 2.理解一段式.两段式以及三段式状态机的区别以及优缺点 实验平台:芯航线FPGA核心板 实验原理: 状态机全称是有限状态机(fin ...

  4. 02-FPGA设计流程介绍——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线——普利斯队长精心奉献 课程目标: 1.了解并学会FPGA开发设计的整体流程 2.设计一个二选一选择器并进行功能仿真.时序仿真以及板级验证 实验平台:芯航线FPGA开发板.杜邦线 实验内容: 良 ...

  5. 10-8位7段数码管驱动实验——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.实现FPGA驱动数码管动态显示: 2.使用In system sources and probes editor工具,输入需要显示在数码管上的的数据, ...

  6. 09B-独立按键消抖实验02——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.复习按键的设计 2.用模块化设计的方式实现每次按下按键0,4个LED显示状态以二进制加法格式加1,每次按下按键1,4个LED显示状态以二进制加法格式减 ...

  7. 05-IP核应用之计数器——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯顿队长精心奉献   实验目的:了解FPGA的IP核相关知识并以计数器IP核为例学会基本IP使用的流程 实验平台:无 实验原理:     IP核(Intellectual Propert ...

  8. 04-时序逻辑电路设计之计数器——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献 实验目的:以计数器为例学会简单的时序逻辑电路设计 实验平台:芯航线FPGA核心板 实验原理: 时序逻辑电路是指电路任何时刻的稳态输出不仅取决于当前的输入,还与前一时刻输入 ...

  9. 03-组合逻辑电路设计之译码器——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线——普利斯队长精心奉献 课程目标:    1. 再次熟悉Quartus II工程的建立以及完整的FPGA开发流程 2. 以译码器为例学会简单组合逻辑电路设计 实验平台:无 实验原理: 组合逻辑, ...

随机推荐

  1. cafe-ssd數據集訓練

    训练方式::https://blog.csdn.net/xiao_lxl/article/details/79106837 caffe-ssd训练自己的数据集 https://blog.csdn.ne ...

  2. Python笔记_第四篇_高阶编程_正则表达式_2.正则表达式入门

    1. 匹配单个字符和数字: . --->> 匹配除换行符以外的任意字符.[0123456789] --->> []字符集合,表示匹配方括号中所包含的任意一个字符.[Thomas ...

  3. .net core编译时设置不自动生成“netcoreapp3.0”目录

    不知道出于什么目的,.netcore项目默认编译时生成的文件要多加一层"netcoreapp3.0"或"netcoreapp2.1",这应该不符合大多数开发者的 ...

  4. 调用支付宝接口的简单demo

    依赖: <!-- alipay-sdk-java 注意一下版本--> <dependency> <groupId>com.alipay.sdk</groupI ...

  5. 吴裕雄--天生自然 PHP开发学习:MySQL子句

    <?php $con=mysqli_connect("localhost","username","password","d ...

  6. java 用阻塞队列实现生产者消费者

    package com.lb; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Blocking ...

  7. Django2.0——路由配置

    URL配置就像是Django所支撑网站的目录,它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表.URL需要在urls.py进行配置,与其对应的视图函数写在views.py文件中.ur ...

  8. JavaScript学习笔记 - 入门篇(3)- DOM操作

    认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面代码 ...

  9. eureka学习之二:自我保护机制

    提供者和消费者:消费者通过注册服务名称,找rpc远程地址,调用提供者的接口 Eureka的自我保护机制:

  10. ASP.NET core MVC动作过滤器执行顺序

    using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Threading.Tasks; namespace dotnet ...