精华内容
下载资源
问答
  • 并行数据转换串行数据的转换器

    万次阅读 2017-07-24 12:04:16
    这篇文章写一下今天早上设计的并行数据串行数据转换器,也算是对并行总线串行总线一个小小的应用,编码过程中也用到了task。 该转换器主要实现的功能是: 1、把并行地址存入寄存器 2、把并行数据存入寄存器 3...

    这篇文章写一下今天早上设计的并行数据到串行数据的转换器,也算是对并行总线和串行总线一个小小的应用,编码过程中也用到了task。

    该转换器主要实现的功能是:

    1、把并行地址存入寄存器

    2、把并行数据存入寄存器

    3、连接串行单总线

    4、地址的串行输出

    5、数据的串行输出

    6、挂起串行单总线

    7、给信号源应答

    8、让信号源给出下一个操作对象

    9、结束写操作

    该设计利用嵌套的状态机实现,主状态机分为四个状态:idle,addr_write,data_write,stop,主状态机中会涉及到任务shift8out的调用,该任务主要实现并行数据到串行数据的转换,也是由一个状态机实现。下面给出整个设计的代码:

    设计代码:

    ///并串转换器//
    module ps_convertor(clk,rst,data,addr,sda,ack);
    parameter idle=4'b0001,addr_write=4'b0010,data_write=4'b0100,stop=4'b1000;//独热编码
    parameter sh8_start=9'b00000_0001;
    parameter bit6     =9'b00000_0010;
    parameter bit5     =9'b00000_0100;
    parameter bit4     =9'b00000_1000;
    parameter bit3     =9'b00001_0000;
    parameter bit2     =9'b00010_0000;
    parameter bit1     =9'b00100_0000;
    parameter bit0     =9'b01000_0000;
    parameter sh8_stop =9'b10000_0000;
    
              
    input clk,rst;
    input [7:0]addr,data;
    inout sda;//串行总线
    output ack;//应答信号将输入测试模块
    
    reg ack;
    
    reg link_write;//写开关
    reg [7:0] sh8out_buf;//并行总线缓冲器
    
    reg [3:0] mstate;//主状态机的状态寄存器
    reg [8:0] sh8_state;//并串转换状态机状态寄存器
    
    reg FF;//标志寄存器,用来表示任务是否完成
    
    assign sda=(link_write)?sh8out_buf[7]:1'hz;//串行总线数据传输
    
    always@(posedge clk)
    begin
     if(!rst)//同步复位
     begin
      mstate<=idle;
      link_write<=0;
      FF<=0;
      sh8out_buf<=0;
      //sh8_state<=sh8_start;
      ack<=0;
     end
     else 
     begin
     case (mstate)
      idle: begin
             mstate<=addr_write;
    		 link_write<=0;
    		 FF<=0;
    		 sh8out_buf<=addr;
    		 sh8_state<=sh8_start;
    		 ack<=0;
            end
      addr_write: 
            begin
    		 if(FF==0)
    		  begin
    		   shift8out;
    		  end
    		 else 
    		  begin
    		   FF<=0;
    		   mstate<=data_write;
    		   sh8out_buf<=data;
    		   sh8_state<=sh8_start;
    		  end
    		end
      data_write:
            begin
    		 if(FF==0)
    		  begin
    		   shift8out;
    		  end
    		 else 
    		  begin
    		   FF<=0;
    		   mstate<=stop;
    		   ack<=1;
    		  end
    		end
      stop: begin
             ack<=0;
    		 mstate<=idle;
            end
      //default: mstate<=idle;       
     endcase
     end
    end
    //并串转换模块
    task shift8out;
     begin
      case(sh8_state)
       sh8_start: begin
                   link_write<=1;
    			   sh8_state<=bit6;
                  end
       bit6:      begin
                   //link_write<=1;
                   sh8_state<=bit5;
    			   sh8out_buf<=sh8out_buf<<1;
                  end
       bit5:      begin
                   sh8_state<=bit4;
    			   sh8out_buf<=sh8out_buf<<1;
                  end
       bit4:      begin
                   sh8_state<=bit3;
    			   sh8out_buf<=sh8out_buf<<1;
                  end
       bit3:      begin
                   sh8_state<=bit2;
    			   sh8out_buf<=sh8out_buf<<1;
                  end
       bit2:      begin
                   sh8_state<=bit1;
    			   sh8out_buf<=sh8out_buf<<1;
                  end
       bit1:      begin
                   sh8_state<=bit0;
    			   sh8out_buf<=sh8out_buf<<1;
                  end
       bit0:      begin
                   sh8_state<=sh8_stop;
    			   sh8out_buf<=sh8out_buf<<1;
                  end
       sh8_stop: begin 
                  FF<=1;
    			  sh8_state<=sh8_start;
    			  link_write<=0;
    			 end
    			  
      endcase
     end
    endtask
    
    endmodule
    

    测试模块:

    `timescale 1ns/1ns
    `define half_cycle 10
    module signal;
    reg clk,rst;
    reg [7:0]data,addr;
    wire sda,ack;
    always #(`half_cycle) clk=~clk;
    initial 
    begin
      rst=1;
      clk=0;
      data=8'b1010_1010;
      addr=0;
      #100 rst=0;
      #100 rst=1;
      #(200* `half_cycle)$stop;
    end
    
    always @(posedge ack)
    begin
     data=data+1;
     addr=addr+1;
    end
     ps_convertor m(clk,rst,data,addr,sda,ack);
    endmodule
    


    最终在modelsim中得到的仿真图如下:



    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    展开全文
  • 并行数据转换串行数据_74ls165 由拨马开关控制并行数据状态,通过74LS165转串口输出 在由8位LED灯的亮灭来显示当前的拨码开关的状态 源程序+Proteus的仿真文件 可以帮助你很好的学习哦
  • 并行传输数据和串行传输数据 计算机系统中的并行处理和数据传输模式 (Parallel Processing and Data Transfer Modes in a Computer System) Instead of processing each instruction sequentially, a parallel ...

    并行传输数据和串行传输数据

    Instead of processing each instruction sequentially, a parallel processing system provides concurrent data processing to increase the execution time.

    并行处理系统不是顺序处理每个指令,而是提供并行数据处理以增加执行时间。

    In this the system may have two or more ALU's and should be able to execute two or more instructions at the same time. The purpose of parallel processing is to speed up the computer processing capability and increase its throughput.

    在这种情况下,系统可能具有两个或多个ALU,并且应该能够同时执行两个或多个指令。 并行处理的目的是加快计算机处理能力并提高其吞吐量。

    NOTE: Throughput is the number of instructions that can be executed in a unit of time.

    注意: 吞吐量是单位时间内可以执行的指令数。

    Parallel processing can be viewed from various levels of complexity. At the lowest level, we distinguish between parallel and serial operations by the type of registers used. At the higher level of complexity, parallel processing can be achieved by using multiple functional units that perform many operations simultaneously.

    可以从各种复杂度上查看并行处理。 在最低层次上,我们通过使用的寄存器类型区分并行操作和串行操作。 在较高的复杂度上,可以通过使用同时执行许多操作的多个功能单元来实现并行处理。

    Mapping and Concept of Virtual Memory

    计算机系统的数据传输模式 (Data Transfer Modes of a Computer System)

    According to the data transfer mode, computer can be divided into 4 major groups:

    根据数据传输方式,计算机可分为4大类:

    1. SISD

      可持续发展研究所

    2. SIMD

      SIMD

    3. MISD

      MISD

    4. MIMD

      MIMD

    SISD(单指令流,单数据流) (SISD (Single Instruction Stream, Single Data Stream))

    It represents the organization of a single computer containing a control unit, processor unit and a memory unit. Instructions are executed sequentially. It can be achieved by pipelining or multiple functional units.

    它代表了包含控制单元,处理器单元和存储单元的单个计算机的组织。 指令按顺序执行。 可以通过流水线或多个功能单元来实现。

    SIMD(单指令流,多数据流) (SIMD (Single Instruction Stream, Multiple Data Stream))

    It represents an organization that includes multiple processing units under the control of a common control unit. All processors receive the same instruction from control unit but operate on different parts of the data.

    它代表一个组织,在一个公共控制单元的控制下包括多个处理单元。 所有处理器都从控制单元接收相同的指令,但是对数据的不同部分进行操作。

    They are highly specialized computers. They are basically used for numerical problems that are expressed in the form of vector or matrix. But they are not suitable for other types of computations

    它们是高度专业的计算机。 它们基本上用于以向量或矩阵形式表示的数值问题。 但是它们不适合其他类型的计算

    MISD(多指令流,单数据流) (MISD (Multiple Instruction Stream, Single Data Stream))

    It consists of a single computer containing multiple processors connected with multiple control units and a common memory unit. It is capable of processing several instructions over single data stream simultaneously. MISD structure is only of theoretical interest since no practical system has been constructed using this organization.

    它由一台计算机组成,其中包含与多个控制单元和一个公共存储单元连接的多个处理器。 它能够同时在单个数据流上处理多个指令。 MISD结构仅具有理论意义,因为尚未使用该组织构建实用系统。

    MIMD(多指令流,多数据流 (MIMD (Multiple Instruction Stream, Multiple Data Stream)

    It represents the organization which is capable of processing several programs at same time. It is the organization of a single computer containing multiple processors connected with multiple control units and a shared memory unit. The shared memory unit contains multiple modules to communicate with all processors simultaneously. Multiprocessors and multicomputer are the examples of MIMD. It fulfills the demand of large scale computations.

    它代表能够同时处理多个程序的组织。 它是一台计算机的组织,其中包含与多个控制单元和一个共享存储单元连接的多个处理器。 共享内存单元包含多个模块,可同时与所有处理器通信。 多处理器和多计算机是MIMD的示例。 它满足了大规模计算的需求。

    翻译自: https://www.studytonight.com/computer-architecture/parallel-processing-and-data-transfer

    并行传输数据和串行传输数据

    展开全文
  • 并行数据串行数据模块的设计

    千次阅读 2017-11-14 19:08:59
    通信协议 scl为不断输出的时钟信号,如果scl为高电平时,sda由高变低,穿行数据流开始;...sda信号的数据值必须在scl高电平之间稳定,在scl低电平时才可以改变,否则的话,立即就结束了串行数据转换

    通信协议
    scl为不断输出的时钟信号,如果scl为高电平时,sda由高变低,穿行数据流开始;如果scl为高电平,sda由低变高,串行数据结束。sda信号的数据值必须在scl高电平之间稳定,在scl低电平时才可以改变,否则的话,立即就结束了串行数据的转换。

    展开全文
  • 今天随手写了一个四组6比特的并行数据转换串行数据的模块,这里贴出来跟大家分享一下 环境:ISE10.1 synplicity 9.6.2综合 modelsim6.5仿真 程序如下: module parallel(clk,rst,r1,r2,r3,r4,dout,flag1,flag...

    今天随手写了一个四组6比特的并行数据转换成串行数据的模块,这里贴出来跟大家分享一下

    环境:ISE10.1   synplicity 9.6.2综合  modelsim6.5仿真

    程序如下:

    module parallel(clk,rst,r1,r2,r3,r4,dout,flag1,flag2,flag3,flag4);//6位并串转换程序

    input clk,rst;

    input[5:0]r1,r2,r3,r4;//6bit input signal

    output dout,flag1,flag2,flag3,flag4;

    reg dout,flag1,flag2,flag3,flag4;

    reg[1:0]counter_4;

    reg[2:0]couner_6bit;

    always @ (posedge clk or negedge rst )begin//have a problem

      if(!rst)

        begin

            counter_4<=2'b00;

                         couner_6bit<=3'b00;

                             flag1<=0; 标志四组数据转行的情况,用于检测转行的正确性

                                  flag2<=0;

                                  flag3<=0;

                                  flag4<=0;

                        end

       else

             begin

             case(counter_4)

               2'b00:

               begin

           dout<=r1[couner_6bit];

                                         flag1<=1;

                                         flag2<=0;

                                         flag3<=0;

                                         flag4<=0;

                                 if(couner_6bit==3'b101)begin

                                   counter_4=counter_4+1;

                                         couner_6bit<=3'b00;

                                   end

                                else couner_6bit=couner_6bit+1;

                       end

              2'b01:

              begin

           dout<=r2[couner_6bit];

                                         flag1<=0;

                                         flag2<=1;

                                         flag3<=0;

                                         flag4<=0;

                                 if(couner_6bit==3'b101)begin

                                   counter_4=counter_4+1;

                                         couner_6bit<=3'b00;

                                end

                                else couner_6bit=couner_6bit+1;

               end

              2'b10:

              begin

           dout<=r3[couner_6bit];

                                         flag1<=0;

                                         flag2<=0;

                                         flag3<=1;

                                         flag4<=0;

                                if(couner_6bit==3'b101)begin

                                   counter_4=counter_4+1;

                                         couner_6bit<=3'b00;

                                end

                                else couner_6bit=couner_6bit+1;

               end

              2'b11:

              begin

           dout<=r4[couner_6bit];

                                         flag1<=0;

                                         flag2<=0;

                                         flag3<=0;

                                         flag4<=1;

                                 if(couner_6bit==3'b101)begin

                                   counter_4=counter_4+1;

                                         couner_6bit<=3'b00;

                                end

                                else couner_6bit=couner_6bit+1;

               end

             default:

             begin                 

                         counter_4<=2'b00;

                         couner_6bit<=3'b00;

                                         flag1<=0;

                                         flag2<=0;

                                         flag3<=0;

                                         flag4<=0;

       end

     endcase

       end

             end

    endmodule

    测试文件:

             initial begin

                       // Initialize Inputs

                       clk = 0;

                       rst = 0;

                       r1 = 0;

                       r2 = 0;

                       r3 = 0;

                       r4 = 0;

                       #10;

                       rst=1;      

                       #20;

                       r1=6'b100000;

                       r2=6'b000011;

                       r3=6'b011100;

                       r4=6'b011110;

             end

             always #5 clk=~clk;

    endmodule

    仿真结果:数据从右到左读出

     

    修改程序:红色表示修改处

     

    module parallel(clk,rst,r1,r2,r3,r4,dout,flag1,flag2,flag3,flag4);//6位并串转换程序

    input clk,rst;

    input[5:0]r1,r2,r3,r4;//6bit input signal

    output dout,flag1,flag2,flag3,flag4;

    reg dout,flag1,flag2,flag3,flag4;

    reg[1:0]counter_4;

    reg[2:0]couner_6bit=3'b101;

    always @ (posedge clk or negedge rst )begin//have a problem

      if(!rst)

        begin

            counter_4<=2'b00;

                         couner_6bit<=3'b101;

                             flag1<=0;

                                         flag2<=0;

                                         flag3<=0;

                                         flag4<=0;

                        end

       else

             begin

             case(counter_4)

               2'b00:

               begin

           dout<=r1[couner_6bit];

                                         flag1<=1;

                                         flag2<=0;

                                         flag3<=0;

                                         flag4<=0;

                                 if(couner_6bit==3'b000)begin

                                   counter_4=counter_4+1;

                                         couner_6bit<=3'b101;

                                   end

                                else couner_6bit=couner_6bit-1;

                       end

              2'b01:

              begin

           dout<=r2[couner_6bit];

                                         flag1<=0;

                                         flag2<=1;

                                         flag3<=0;

                                         flag4<=0;

                                 if(couner_6bit==3'b000)begin

                                   counter_4=counter_4+1;

                                         couner_6bit<=3'b101;

                                   end

                                else couner_6bit=couner_6bit-1;

               end

              2'b10:

              begin

           dout<=r3[couner_6bit];

                                         flag1<=0;

                                         flag2<=0;

                                         flag3<=1;

                                         flag4<=0;

                                if(couner_6bit==3'b000)begin

                                   counter_4=counter_4+1;

                                         couner_6bit<=3'b101;

                                   end

                                else couner_6bit=couner_6bit-1;

               end

              2'b11:

              begin

           dout<=r4[couner_6bit];

                                         flag1<=0;

                                         flag2<=0;

                                         flag3<=0;

                                         flag4<=1;

                                 if(couner_6bit==3'b000)begin

                                   counter_4=counter_4+1;

                                         couner_6bit<=3'b101;

                                   end

                                else couner_6bit=couner_6bit-1;

               end

             default:

             begin                

                         counter_4<=2'b00;

                         couner_6bit<=3'b101;

                                         flag1<=0;

                                         flag2<=0;

                                         flag3<=0;

                                         flag4<=0;

       end

     endcase

       end

             end

    endmodule

     

    则结果从左到右输出

     

     

    展开全文
  • //进来的数据和使能打两拍同步一下 always@(posedge clk_50M_i or negedge rst_n_i) if(!rst_n_i)begin data_i_tmp1 ; data_i_tmp2 ; data_en_tmp1 ; data_en_tmp2 ; end else begin data_i_tmp1 ; ...
  • 并行串行 串行并行输出模块

    千次阅读 2018-12-28 17:50:02
    并行转串行 串行转并行输出模块 夏宇闻Verilog 第15章学习笔记 通信协议:scl为高,sda由高跳变低,start;scl为高,sda由低跳变为高,stop;scl为低,sda数据位才能...//************************并行数据转一种...
  • 8251A 并行传送和串行传送

    千次阅读 2018-10-01 08:41:32
    20. 8251A 芯片中实现并行数据转换串行数据的部件 一、数据传送 并行传送 数据在多条并行 1 位宽的传输线上同时由源传送到目的。以 1 字节为例,在并行传送中, 1 字节数据通过 8 条并行传输线同时由源传送到目的...
  • 并行传输和串行传输

    千次阅读 2014-03-10 10:55:34
    并行数据传输: 是在传输中有多个数据位同时在设备之间进行的传输.一个编了码的字符通常是由若干位二进制数表示,如用ASCII码编码的符号是由8位二进制数表示的,则并行传输ASCII编码符号就需要8个传输信道,使表示一个...
  • 模块功能:接收串行数据,转为并行数据。 应用场景:在SPI,Uart等串行协议接收侧均有应用。 二. 模块框图与使用说明 有两种模式(通过参数SDATA_IS_CONTINUOUS进行选择): 1.数据连续模式,此时sdata_valid指示...
  • 设计两个可综合的电路模块:第一个模块(M1)接受四位并行数据,并将其转化为简化I2C传输格式。sclk为输入主钟,data[3:0]为输入的四位数据,ack为请求发送数据信号(请求后才有数据发送到data[3:0]),数据流用scl...
  • 计算机并行串行数据的处理

    千次阅读 2011-04-20 22:38:00
    在计算机端接收数据时,需要将串行数据转换并行数据,计算机是如何处理的?下面从程序的角度进行解说。首先是硬件上进行转换。网卡上一个硬件缓冲叫FIFO(fist in, firt out),数据结构里说的队列是一个意思...
  • 数据传输的顺序可以分为串并行通信(传输)和串行通信(传输); 按数据传输的同步方式可分为同步传输异步传输,而同步异步同属于串行通信,是串行通信的两种基本形式!!! 按数据传输的流向时间关系可以...
  • endmodule 仿真截图: 说明:无意中看到了一些博客上的数据串并转换,逻辑上基本都能实现,但绝大部分都不能用,连基本的信号使能、时序打拍都没有,信号命名也很随便,就简单的实现了移位寄存器,直接复用的价值...
  • 并行和串行通信

    千次阅读 2009-04-29 12:08:00
    并行通信的优点是速度快,但发送端与接收端之间有若干条线路,费用高,仅适合于近距离高速率的通信。并行通信在计算机内部总线以及并行口通信中己得到广泛的应用。 串行通信是指数据串行方式在一条信道上传输,...
  • 串行化是指将对象的状态转换成可以存储、传送的形式的过程。微软提供了两种串行化的方式.一种是:Binary, 一种事:XML and SOAP 。 所以理论上来说所有的对象都可以定义成串行化, 但是一般来说,需要存储、传送的...
  • 嵌入式 并行输出与串行输出

    千次阅读 2013-12-02 14:50:32
    十三 绝对型编码器的串行和并行输出的详细一点的信息?    并行输出:  绝对型编码器输出的是多位数码(格雷码或纯二进制码),并行输出就是在接口上有多点高低电平输出,以代表数码的1或0,对于位数不高的绝对...
  • 前言:最近再搞个PCIe的高速串行总线的项目,关于串行和并行数据的传输到底谁更快,分别有哪些优势劣势呢等等一些问题现在做个整理,是对自己学习的一个记录,同时呢,也为刚刚想入门的或者对高速串行总线有些误解...
  • 并行串行传输,串行高速传输

    千次阅读 2018-03-24 17:17:05
    串行只有一根数据线,不存在信号线之间的串扰,而且串行还可以采用低压差分信号,可以大大提高它的抗干扰性,所以可以实现更高的传输速率,尽管并行可以一次传多个数据位,但是时钟远远低于串行,所以目前串行传输...
  • 强大的Stream API以及并行流与串行

    千次阅读 2019-07-23 14:53:46
    文章目录Stream APIStreamStream操作的三个步骤创建Stream中间操作终止操作创建StreamStream的中间操作筛选与切片映射排序Stream的终止操作查找与匹配归约收集并行流与串行流了解Fork/Join框架Fork/Join框架与传统...
  • 串行和并行区别

    千次阅读 2013-06-25 21:52:24
    并行通信传输中有多个数据位,同时在两个设备之间传输。发送设备将这些数据位通过 对应的数据线传送给接收设备,还可...串行数据传输时,数据是一位一位地在通信线上传输的,先由具有几位总线的计算机内的发送设备,
  • 串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,...而在接收端,却要把接收到的串行数据转换并行数据。 串行通信___异步传送方式 起止式异步通信的特点:传输不连续,以字...
  • Nand Flash之并行串行

    千次阅读 2019-04-14 16:16:11
    之前我们有讲到NAND Flash与NOR Flash的封装、读取速率、写速率电路设计等方面的差异,现在我们将会讲到并行串行Flash,主要是串行吧,并行需要讲的很少。 因为串行并行主要区别在于IO口的数量上,因为有些...
  • 注 : 文中讲述的原理是推理探讨 , 现实中的实现不一定完全相同 。 开始之前, 可以先参考看看我之前写的两篇文章 : 《设计一个 硬件 实现的 Dictionary(字典)》...
  • 串行通信和并行通信区别

    千次阅读 2010-01-14 12:19:10
    并行通信传输中有多个数据位,同时在两个设备之间传输。发送设备将这些数据位通过 对应的数据线传送给接收...串行数据传输时,数据是一位一位地在通信线上传输的,先由具有几位总线的计算机内的发送设备,将几...
  • 串行数据是各数据位按顺序进行,并行是各数据位同时传送
  • 并行通信传输中有多个数据位,同时在两个设备之间传输。发送设备将这些数据位通过 对应的数据线传送给接收设备,还可...串行数据传输时,数据是一位一位地在通信线上传输的,先由具有几位总线的计算机内的发送设备,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,195
精华内容 16,878
关键字:

并行数据和串行数据的转换