精华内容
下载资源
问答
  • 实用的串并转换模块,添加了奇偶校验码的检测功能,如果出现误码现象将会报警输出。
  • verilog语言编写的I2Cslave串并转换模块
  • 时序控制的串并转换模块,其中包括并行转串行子模块和串行转并行子模块,主时钟24Mhz;在安装了modelsim之后,直接运行testbench文件可以获得仿真结果。
  • 刚写完2w字报告,写点verilog压压惊。...1.串并转换模块(1 to 8) 1 `timescale 1ns / 1ps 2 ////////////////////////////////////////////////////////////////////////////////// 3 // Company: ...

    刚写完2w字报告,写点verilog压压惊。

    造轮子是件好玩儿的事。

    不务正业,游手好闲……

    1.串并转换模块(1 to 8)

     1 `timescale 1ns / 1ps
     2 //
     3 // Company: 
     4 // Engineer: 
     5 // 
     6 // Create Date:    20:30:15 04/14/2015 
     7 // Design Name: 
     8 // Module Name:    SerialToParallel 
     9 // Project Name: 
    10 // Target Devices: 
    11 // Tool versions: 
    12 // Description: 
    13 //
    14 // Dependencies: 
    15 //
    16 // Revision: 
    17 // Revision 0.01 - File Created
    18 // Additional Comments: 
    19 //
    20 //
    21 module SerialToParallel(
    22     input         CLK,    //时钟
    23     input         RSTn,    //复位
    24     input         Enable,    //输入有效
    25     input         DataIn,    //串行输入
    26     output reg    Ready,    //输出有效
    27     output[7:0]    Index,    //并行数据索引
    28     output[7:0] ParallelData    //并行数据输出
    29     );
    30     
    31     reg[7:0]    Data_Temp;    //数据缓存
    32     reg[3:0]    counter;    //位数计数器
    33     reg[3:0]    state;        //状态机
    34     reg[7:0]    Index_Temp;    //索引缓存
    35     
    36     assign    Index=Index_Temp;
    37     assign    ParallelData=Ready?Data_Temp:8'd0;
    38     
    39     ////
    40     //state:
    41     //4'd0:复位 
    42     //
    43     //4'd1:未复位,未使能
    44     //
    45     //4'd2:未复位,输入使能
    46     //
    47     
    48     always@(posedge CLK or negedge RSTn)
    49     if(!RSTn)
    50         begin
    51             state<=4'd0;        //复位
    52             Ready<=0;
    53             counter<=4'd0;
    54             Data_Temp<=8'd0;
    55             Index_Temp<=8'd0;
    56         end
    57     else
    58         begin
    59             case(state)
    60                 4'd0:
    61                 begin
    62                     if(!Enable)state<=4'd1;
    63                     else state<=4'd2;
    64                     Ready<=0;
    65                 end
    66                 4'd1:
    67                 begin
    68                     if(!Enable)state<=4'd1;
    69                     else state<=4'd2;
    70                     Ready<=0;
    71                     counter<=4'd0;
    72                     Data_Temp<=8'd0;
    73                 end
    74                 4'd2:
    75                 begin
    76                     if(!Enable)state<=4'd1;
    77                     else state<=4'd2;
    78                     case(counter)
    79                     4'd0:begin Data_Temp[0]<=DataIn;counter<=counter + 1'b1;Ready<=0;end
    80                     4'd1:begin Data_Temp[1]<=DataIn;counter<=counter + 1'b1;Ready<=0;end
    81                     4'd2:begin Data_Temp[2]<=DataIn;counter<=counter + 1'b1;Ready<=0;end
    82                     4'd3:begin Data_Temp[3]<=DataIn;counter<=counter + 1'b1;Ready<=0;end
    83                     4'd4:begin Data_Temp[4]<=DataIn;counter<=counter + 1'b1;Ready<=0;end
    84                     4'd5:begin Data_Temp[5]<=DataIn;counter<=counter + 1'b1;Ready<=0;end
    85                     4'd6:begin Data_Temp[6]<=DataIn;counter<=counter + 1'b1;Ready<=0;end
    86                     4'd7:begin Data_Temp[7]<=DataIn;counter<=4'd0;Index_Temp<=Index_Temp + 1'b1;Ready<=1'b1;end
    87                     endcase
    88                 end
    89             endcase
    90         end
    91 
    92 endmodule

     

    2.串并转换测试文件

     

     1 `timescale 1ns / 1ps
     2 
     3 ////
     4 // Company: 
     5 // Engineer:
     6 //
     7 // Create Date:   22:02:53 04/14/2015
     8 // Design Name:   SerialToParallel
     9 // Module Name:   C:/Users/Administrator/Documents/Tencent Files/1577197070/FileRecv/SerialToParallel/TB_SerialToParallel.v
    10 // Project Name:  SerialToParallel
    11 // Target Device:  
    12 // Tool versions:  
    13 // Description: 
    14 //
    15 // Verilog Test Fixture created by ISE for module: SerialToParallel
    16 //
    17 // Dependencies:
    18 // 
    19 // Revision:
    20 // Revision 0.01 - File Created
    21 // Additional Comments:
    22 // 
    23 ////
    24 
    25 module TB_SerialToParallel;
    26 
    27     // Inputs
    28     reg CLK;
    29     reg RSTn;
    30     reg Enable;
    31 
    32     // Outputs
    33     wire Ready;
    34     wire [7:0] Index;
    35     wire [7:0] ParallelData;
    36 
    37     // Instantiate the Unit Under Test (UUT)
    38     SerialToParallel uut (
    39         .CLK(CLK), 
    40         .RSTn(RSTn), 
    41         .Enable(Enable), 
    42         .DataIn(data), 
    43         .Ready(Ready), 
    44         .Index(Index), 
    45         .ParallelData(ParallelData)
    46     );
    47 
    48     initial begin
    49         // Initialize Inputs
    50         CLK = 0;
    51         RSTn = 0;
    52         Enable = 0;
    53 
    54         // Wait 100 ns for global reset to finish
    55         #100;RSTn = 1;Enable = 1;
    56         
    57         // Add stimulus here
    58         forever #5 CLK = ~CLK;
    59     end
    60     
    61     wire data;
    62     data_generator    unit1(
    63         .clock(CLK),
    64         .reset(RSTn),
    65         .data(data)
    66     );
    67     
    68       
    69 endmodule

     

     

    3.随机信号发生器(内含两个版本)

     1 `timescale 1ns / 1ps
     2 //
     3 // Company: 
     4 // Engineer: 
     5 // 
     6 // Create Date:    22:22:03 04/14/2015 
     7 // Design Name: 
     8 // Module Name:    data_generator 
     9 // Project Name: 
    10 // Target Devices: 
    11 // Tool versions: 
    12 // Description: 
    13 //
    14 // Dependencies: 
    15 //
    16 // Revision: 
    17 // Revision 0.01 - File Created
    18 // Additional Comments: 
    19 //
    20 //
    21 module data_generator(
    22 
    23     // Inputs
    24     input     clock,
    25     input     reset,
    26     
    27     // Outputs
    28     output    data
    29     );
    30     
    31     reg        data_temp;
    32     
    33     assign    data = data_temp;
    34     
    35     always@(posedge clock or negedge reset)
    36     if(!reset)
    37         data_temp<=1'b0;
    38     else
    39         data_temp<={$random} % 2;
    40     
    41 endmodule
    42 //
    43 //module data_generator(
    44 //
    45 //    // Inputs
    46 //    input     clock,
    47 //    input     reset,
    48 //    
    49 //    // Outputs
    50 //    output[7:0]        data
    51 //    );
    52 //    
    53 //    reg[7:0]            data_temp;
    54 //    
    55 //    assign    data = data_temp;
    56 //    
    57 //    always@(posedge clock or negedge reset)
    58 //    if(!reset)
    59 //        data_temp<=8'd0;
    60 //    else
    61 //        data_temp<={$random} % 256;
    62 //    
    63 //endmodule

     4.测试图

    从图中可以清晰看到,模块每采集8个串行数据执行一次输出,同时输出有效置1。

     

    5.应用

    以数字调制中的16QAM为例

    输入的信息每四位进行一次编码,实轴和虚轴分别代表调制后的同相分量与正交分量,除以1/sqrt(10)进行归一化,再用8位定点数表示。

    这样信息就被分成IM和RE两路。

    测试图:

    串并转换模块的Index[7:0]、Ready、ParallelData同步

    数据映射模块的IndexOut[7:0]、QAM_Ready、RE_TEMP、IM_TEMP同步,且比串并转换模块晚一个时钟。

    首先要每四位做一次串并转换,对原模板进行修改

     1 `timescale 1ns / 1ps
     2 //
     3 // Company: 
     4 // Engineer: 
     5 // 
     6 // Create Date:    20:30:15 04/14/2015 
     7 // Design Name: 
     8 // Module Name:    SerialToParallel 
     9 // Project Name: 
    10 // Target Devices: 
    11 // Tool versions: 
    12 // Description: 
    13 //
    14 // Dependencies: 
    15 //
    16 // Revision: 
    17 // Revision 0.01 - File Created
    18 // Additional Comments: 
    19 //
    20 //
    21 module SerialToParallel(
    22     input         CLK,
    23     input         RSTn,
    24     input         Enable,        
    25     input         DataIn,
    26     output reg    Ready,
    27     output[7:0]    Index,
    28     output[3:0] ParallelData
    29     );
    30     
    31     reg[3:0]    Data_Temp;
    32     reg[3:0]    counter;
    33     reg[3:0]    state;
    34     reg[7:0]    Index_Temp;
    35     
    36     assign    Index=Index_Temp;
    37     assign    ParallelData=Ready?Data_Temp:4'd0;
    38     
    39     ////
    40     //state:
    41     //4'd0:复位 
    42     //        转换计数清零,输出计数清零,输出数据清零
    43     //4'd1:未复位,未使能
    44     //        转换计数清零,输出数据清零
    45     //4'd2:未复位,输入使能
    46     //
    47     
    48     always@(posedge CLK or negedge RSTn)
    49     if(!RSTn)
    50         begin
    51             state<=4'd0;        //复位
    52             Ready<=0;
    53             counter<=4'd0;
    54             Data_Temp<=4'd0;
    55             Index_Temp<=8'd0;
    56         end
    57     else
    58         begin
    59             case(state)
    60                 4'd0:
    61                 begin
    62                     if(!Enable)state<=4'd1;
    63                     else state<=4'd2;
    64                     Ready<=0;
    65                 end
    66                 4'd1:
    67                 begin
    68                     if(!Enable)state<=4'd1;
    69                     else state<=4'd2;
    70                     Ready<=0;
    71                     counter<=4'd0;
    72                     Data_Temp<=4'd0;
    73                 end
    74                 4'd2:
    75                 begin
    76                     if(!Enable)state<=4'd1;
    77                     else state<=4'd2;
    78                     case(counter)
    79                     4'd0:begin Data_Temp[0]<=DataIn;counter<=counter + 1'b1;Ready<=0;end
    80                     4'd1:begin Data_Temp[1]<=DataIn;counter<=counter + 1'b1;Ready<=0;end
    81                     4'd2:begin Data_Temp[2]<=DataIn;counter<=counter + 1'b1;Ready<=0;end
    82                     4'd3:begin Data_Temp[3]<=DataIn;counter<=4'd0;Index_Temp<=Index_Temp + 1'b1;Ready<=1'b1;end
    83                     endcase
    84                 end
    85             endcase
    86         end
    87 
    88 endmodule

     


    然后进行映射:

     1 `timescale 1ns / 1ps
     2 //
     3 // Company: 
     4 // Engineer: 
     5 // 
     6 // Create Date:    22:54:28 04/14/2015 
     7 // Design Name: 
     8 // Module Name:    dataout 
     9 // Project Name: 
    10 // Target Devices: 
    11 // Tool versions: 
    12 // Description: 
    13 //
    14 // Dependencies: 
    15 //
    16 // Revision: 
    17 // Revision 0.01 - File Created
    18 // Additional Comments: 
    19 //
    20 //
    21 module QAM16(
    22     
    23     // Inputs
    24     input             CLK,
    25     input             RSTn,
    26     input             Enable,    //输入数据有效
    27     input    [3:0]        Data,        //输入数据
    28     input    [7:0]        Index,    //输入数据索引
    29     
    30     // Outputs
    31     output reg    QAM_Ready,        //输出数据有效
    32     output reg    [7:0]    RE_TEMP,    //输出数据实部
    33     output reg    [7:0]    IM_TEMP,    //输出数据虚部
    34     output reg    [7:0]    IndexOut    //输出数据索引
    35     );
    36     
    37     always@(posedge CLK or negedge RSTn)
    38     if(!RSTn)
    39         begin
    40             RE_TEMP<=8'd0;
    41             IM_TEMP<=8'd0;
    42             QAM_Ready<=0;
    43             IndexOut<=8'd0;
    44         end
    45     else
    46         begin
    47             if(Enable)
    48                 begin    //数据映射
    49                     case(Data[1:0])
    50                     2'b00:RE_TEMP[7:0]<=8'b11000011;
    51                     2'b10:RE_TEMP[7:0]<=8'b11101100;
    52                     2'b01:RE_TEMP[7:0]<=8'b00111101;
    53                     2'b11:RE_TEMP[7:0]<=8'b00010100; 
    54                     endcase
    55                     case(Data[3:2])
    56                     2'b00:IM_TEMP[7:0]<=8'b11000011;
    57                     2'b10:IM_TEMP[7:0]<=8'b11101100;
    58                     2'b01:IM_TEMP[7:0]<=8'b00111101;
    59                     2'b11:IM_TEMP[7:0]<=8'b00010100;
    60                     endcase
    61                     IndexOut<=Index;
    62                     QAM_Ready<=1;
    63                 end
    64             else 
    65                 begin
    66                     RE_TEMP<=8'd0;
    67                     IM_TEMP<=8'd0;
    68                     QAM_Ready<=0;
    69                 end
    70         end
    71 
    72 endmodule

    测试

     1 `timescale 1ns / 1ps
     2 
     3 ////
     4 // Company: 
     5 // Engineer:
     6 //
     7 // Create Date:   22:02:53 04/14/2015
     8 // Design Name:   SerialToParallel
     9 // Module Name:   C:/Users/Administrator/Documents/Tencent Files/1577197070/FileRecv/SerialToParallel/TB_SerialToParallel.v
    10 // Project Name:  SerialToParallel
    11 // Target Device:  
    12 // Tool versions:  
    13 // Description: 
    14 //
    15 // Verilog Test Fixture created by ISE for module: SerialToParallel
    16 //
    17 // Dependencies:
    18 // 
    19 // Revision:
    20 // Revision 0.01 - File Created
    21 // Additional Comments:
    22 // 
    23 ////
    24 
    25 module TB_16QAM;
    26 
    27     // Inputs
    28     reg CLK;
    29     reg RSTn;
    30     reg Enable;
    31 
    32     // Outputs
    33     wire data;
    34     wire Ready;
    35     wire QAM_Ready;
    36     wire [7:0] Index;
    37     wire [3:0] ParallelData;
    38     wire [7:0]    RE_TEMP;
    39     wire [7:0]    IM_TEMP;
    40     wire [7:0]    IndexOut;
    41 
    42     // Instantiate the Unit Under Test (UUT)
    43     data_generator    uut1(
    44         .clock(CLK),
    45         .reset(RSTn),
    46         .data(data)
    47     );
    48     
    49     SerialToParallel uut2 (
    50         .CLK(CLK), 
    51         .RSTn(RSTn), 
    52         .Enable(Enable), 
    53         .DataIn(data), 
    54         .Ready(Ready), 
    55         .Index(Index), 
    56         .ParallelData(ParallelData)
    57     );
    58     QAM16 uut3 (
    59          .CLK(CLK), 
    60          .RSTn(RSTn), 
    61          .Enable(Ready), 
    62          .Data(ParallelData), 
    63          .Index(Index), 
    64          .RE_TEMP(RE_TEMP), 
    65          .IM_TEMP(IM_TEMP), 
    66          .IndexOut(IndexOut),
    67          .QAM_Ready(QAM_Ready)
    68     );
    69 
    70     initial begin
    71         // Initialize Inputs
    72         CLK = 0;
    73         RSTn = 0;
    74         Enable = 0;
    75 
    76         // Wait 100 ns for global reset to finish
    77         #100;RSTn = 1;Enable = 1;
    78         
    79         // Add stimulus here
    80         forever #5 CLK = ~CLK;
    81     end
    82         
    83 endmodule

     

    转载于:https://www.cnblogs.com/nwpuxuezha/p/4427349.html

    展开全文
  • 1.串并转换模块 可以用两种方式来实现串并转换,一种是移位寄存器,另一种是计数器,这里只用移位寄存器,计数器的可以参考上面的博客 用verilog语言描述为:data<={data[6:0],data_in} data为8位输出寄存器,...

    本文是参考https://blog.csdn.net/vivid117/article/details/102021707这篇文章后结合自己的理解后修改的。

    1.串并转换模块

    可以用两种方式来实现串并转换,一种是移位寄存器,另一种是计数器,这里只用移位寄存器,计数器的可以参考上面的博客

    用verilog语言描述为:data<={data[6:0],data_in}

    data为8位输出寄存器,移位拼接符内的变量位置不同那么移位方向不同。

    本次实现串并转换与上面提到的博客中略有不同,增加了一个输出寄存器,这样可以锁存输出,防止在移位过程中数据变化。

    `timescale 1 ns/ 1 ns
    
    module serial2parallel(
    	input clk,
    	input rst_n,
    	input en,
    	input data_i,
    	output reg [7:0] data_o
    );
    
    reg [7:0] data;//输出寄存器
    reg [2:0] count;//计数器,控制并行数据更新,8位数据
    
    //初始化
    always@(posedge clk or negedge rst_n)
    	begin
    		if(rst_n==1'b0)
    			count<=3'b0;
    		else if(en==1)
    			count<=count+3'b1;
    	end
    
    //移位	
    always@(posedge clk or negedge rst_n)
    	begin
    		if(rst_n==1'b0)
    			data<=8'b0;
    		else if(en==1'b1)
    			data<={data[6:0],data_i};
    	end
    
    //数据输出
    always@(posedge clk or negedge rst_n)
    	begin
    		if(rst_n==1'b0)
    			data_o<=8'b0;
    		else if(rst_n==1'b1&&en==1'b1&&count==3'b111)
    			data_o<=data;
    	end
    endmodule
    

    对应的testbench如下:

    `timescale 1 ns/ 1 ns
    module serial2parallel_tb();
    
    reg clk;
    reg data_i;
    reg en;
    reg rst_n;
    // wires                                              
    wire [7:0]  data_o;                     
    initial                                                
    begin                                                  
    	clk=1'b0;
    	rst_n=1'b0;
    	data_i=1'b0;
    	en=1'b0;
    	#10  rst_n=1'b1;
    	#5	  en = 1'b1;
    end
    
    
    always #2 clk=~clk;
    always #10 data_i = data_i+1'b1;//这里data_i的翻转时间不能设置的太小
    
    serial2parallel s2p (
     
    	.clk(clk),
    	.data_i(data_i),
    	.data_o(data_o),
    	.en(en),
    	.rst_n(rst_n)
    );                                               
                                                      
    endmodule
    

    在使用这个testbench的时候,data_i的翻转时间不能设置太小,一开始设置了每两个时钟翻转一次,结果在仿真时data_o只出一两组数据,但是data中的数据是正常的,这里不知道是什么原因。

    2.并转串模块

    并转串依旧使用移位操作完成,这里设置了一个使能信号,当使能信号使能后才能接收并行数据。因为在实际应用中,如果并口一直在接收数据,那么串口将始终发送新数据的最高位。比如,当第一个时钟来临时,并口发送了0100_0001这8位数据,那么串口会立即输出这8位数据的最高位0,如果第二个时钟来临时,并口发送了0000_0001这8位数据,那么串口此时会立即输出这8位数据的最高位0,而不是上一组数据的次高位。如果加入使能信号,就可以在第一组数据串口没有发送完成之前不接收并口的数据。

    `timescale 1ns/1ns
    
    module parallel2serial(
    	input clk,
    	input rst_n,
    	input en,
    	input [7:0] data_i,
    	output data_o
    );
    
    reg [7:0] data_buf;
    
    always@(posedge clk or negedge rst_n)
    begin
    	if(rst_n==0)
    		data_buf<=0;
    	else if(en==1'b1)
    		data_buf<=data_i;
    	else
    		data_buf<=data_buf<<1;
    end
    
    assign data_o=data_buf[7];
    
    endmodule
    

    Testbench如下:

    `timescale 1 ns/1 ns
    
    module parallel2serial_tb();
    
    reg clk;
    reg rst_n;
    reg en;
    reg [7:0] data_i;
    
    wire data_o;
    
    initial
    begin
    	clk=1'b0;
    	en=1'b0;
       rst_n=1'b0;
    	data_i=8'b01010101;
    	#2	rst_n=1'b1;
    	#4 en=1'b1;
    	#8 en=1'b0;//第一次采集数据,采集到01010101,将在之后的7个时钟内由data_o输出
    	#10 data_i=8'b10110010;
    	#102 en=1'b1;
    	#106 en=1'b0;//第二次采集数据,采集到10110010,将在之后的7个时钟内data_o输出
    end
    
    always #2 clk=~clk;
    
    parallel2serial p2s(
    	.clk		(clk),
    	.rst_n	(rst_n),
    	.en		(en),
    	.data_i	(data_i),
    	.data_o	(data_o)
    );
    endmodule
    

    testbench里设计了两组数据,每次当en使能时,则data_o会立即输出串口数据的最高位(这是因为assign使data_o和data_buf直连了),直到en不再使能,当en不再使能后的第二个时钟来临,data_o会输出次高位,依次类推,所以总共需要en不使能后的7个时钟才能全部输出数据。

    展开全文
  • 串并转换verilog

    千次阅读 2020-06-14 17:04:19
    串并转换verilog verilog如下 //串并转换 //串转并 module serial2parallel( input clk, input rst_n, input datain, input shift_en, input load, output reg [15:0] dataout); reg [15:0] shiftr; //串转...

    串并转换verilog

    verilog如下

    //串并转换
    //串转并
    module serial2parallel(
    	input clk,
    	input rst_n,
    	input datain,
    	input shift_en,
    	input load,
    	output reg [15:0] dataout);
    	
    reg [15:0] shiftr;
    //串转并
    always@(posedge clk)
    	if(!rst_n)
    		shiftr<=0;
    	else if(shift_en)
    	shiftr<={shiftr[14:0],datain};
    
    // load
    always@(posedge clk)
    	if(!rst_n)
    		dataout<=0;
    	else if(load)
    	dataout<=shiftr;
    //assign dataout= load ? shiftr : 0;
    //两种dataout时序不一样	
    endmodule
    
    //并转串
    module parallel2serial(
    	input clk,
    	input rst_n,
    	input [15:0] datain,
    	input shift_en,
    	input load,
    	output dataout);
    	
    reg [15:0] shiftr;
    //shift
    always@(posedge clk)
    	if(!rst_n)
    		shiftr<=0;
    	else if(load)
    	shiftr<=datain;
    	else if(shift_en)
    	shiftr<=shiftr<<1;
    	
    assign dataout=shiftr[15];
    
    endmodule
    

    tb(sv)如下

    
    module tb(  );
    logic clk, rst_n, datain1, dataout2;
    logic shift_en1, shift_en2, load1, load2;
    logic [15:0] datain2, dataout1;
    //实例化,将串接口相连
    serial2parallel serial2parallel(clk, rst_n, dataout2,shift_en1, load1, dataout1);
    parallel2serial parallel2serial (clk, rst_n, datain2, shift_en2, load2, dataout2);
    
    initial begin clk=0; forever #5 clk=~clk; end
    initial begin rst_n=0; #30 rst_n=1; end
    
    initial begin
    load1=0; load2=0;
    #40 load2=1; shift_en1=1; shift_en2=1;  datain2=16'h67;
    #10 load2=0; 
    #150 
    load1=1;
    end
    
    endmodule
    
    展开全文
  • quartus环境下工程,自己写的sipo和piso两个模块,用verilog分别实现串并转换和并串转换,通俗易懂
  • verilog--串并转换

    万次阅读 2019-06-05 21:10:58
    (1)四输入单输出的并串转换模块: module b_c(clk,rst_n,en,d,q); input clk,rst_n; input [3:0]d; output reg en; output reg q; reg [3:0]count; reg [3:0]data; always @(posedge clk or negedge rst_n) begin ...

    (1)四输入单输出的并串转换模块:

    module b_c(clk,rst_n,en,d,q);
    input clk,rst_n;
    input [3:0]d;
    output reg en;
    output reg q;
    
    reg [3:0]count;
    reg [3:0]data;
    always @(posedge clk or negedge rst_n)
    begin
        if(rst_n==0)
        begin
           count<=0;
           en<=0;;
           data<=d;
           q<=0;
        end
        else
        begin
           if(count<4)
           begin
               count<=count+1;
               en<=1;
               data<={data[2:0],data[3]};
               q<=data[3];
           end
           else
           begin
           count<=0;
           en<=0;
           q<=0;
           end
        end
    end
    endmodule
    

    仿真图在这里插入图片描述
    (2)单输入四输出的串并转换模块:

    module c_b(clk,rst_n,en,d,q);
    input clk,rst_n;
    input d;
    output reg en;
    output reg[3:0]q;
    
    reg [3:0]count;
    reg [3:0]data;
    always @(posedge clk or negedge rst_n)
    begin
        if(rst_n==0)
        begin
           count<=0;
           en<=0;;
           data<=4'b0000;
           q<=0;
        end
        else
        begin
           if(count<=4)
           begin
               count<=count+1;
               en<=1;
               data<={data[2:0],d};
               q<=data[3:0];
           end
           else
           begin
           count<=0;
           en<=0;
           q<=0;
           end
        end
    end
    endmodule
    

    仿真图
    在这里插入图片描述

    展开全文
  • 超级好用的串并转换Verilog

    千次阅读 2020-02-09 20:49:59
    本文主要给出四位串并转换的代码,亲测有效!! 相信大家一定能举一反三。
  • 用Verilog实现串并转换

    千次阅读 2020-05-11 19:18:19
    一、串转并转换模块 1) 利用移位寄存器 串行转并行数据输出:采用位拼接技术(移位寄存器),将串行的数据总数先表示出来,然后发送一位数据加一,后面的接收的这样标志:data_o <= {data_o[6:0],data_i };1...
  • Xilinx-7-SelectIO-ISERDESE2-串并转换

    千次阅读 2019-10-28 10:45:50
    ISERDESE2是专用的串并转换器,它在完成串并转换时并不会带来多余的时序上的问题,从而很适合应用到高速源同步应用中。比如摄像头数据。
  • 数字IC设计-FPGA——用Verilog实现串并转换 一、串转并转换模块 1. 利用移位寄存器 2. 利用计数器 input clk, rst_n, data_i; output [7:0] data_o; module Deserialize( input clk, input rst_n, input data_i, ...
  • 关于串并转换的VERILOG代码

    千次阅读 2006-05-04 11:28:00
    关于串并转换的VERILOG代码关于串并转换的VERILOG代码设计题目:8位数据总线,能实现串行数据到8位并行数据的转换,以及8位并行数据到串行数据的转换.具体是哪种转换由sp控制端决定,当sp=1时,是串行输入/并行输出;当sp=...
  • 本系列讨论的四种常用FPGA/CPLD设计思想与技巧:乒乓操作、串并转换、流水线操作、数据接口同步化,都是FPGA/CPLD逻辑设计的内在规律的体现,合理地采用这些设计思想能在FPGA/CPLD设计工作种取得事半功倍的效果。...
  • 通过乒乓操作实现低速模块处理高速数据的实质是:通过 DPRAM 这种缓存单元实现了数据流的串并转换,并行用 “ 数据预处理模块 1” 和 “ 数据预处理模块 2” 处理分流的数据,是面积与速度互换思想的体现!...
  • FPGA中的简单并串,串并转换

    万次阅读 2019-01-10 14:32:32
    笔者在做OFDM扰码模块的时候,发现PSDU数据帧输入是并行数据,需要进行并串转换,才能进入扰码器进行扰码 在进行FFT的时候需要串转并,后面添加仿真图; 并——&gt;串 从图中可以看出,并串转换的原理是:...
  • 输入数据流通过“输入数据选择单元”将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口RAM(DPRAM)、单口RAM(SPRAM)、FIFO等。 在第一个缓冲周期,
  • 串并转化verilog

    2011-02-28 10:45:35
    利用verilog语言编写的串并转换模块,已经经过验证通过。
  • //串并转换,移位寄存器(左移右移) module ex_shift_reg( input wire lvds_clk,//标准的查分信号的时钟 input wire rst_n, input wire lvds_d,//输入信号 output reg [7:0] o_lvds_d//输出信号...
  • 系统:win10 软件编辑和程序下载平台:Quartus II 仿真平台:modelsim FPGA:EP4CE6 实验仿真结果 设计思路: 由于是程序员,所以结构要清晰,操作要骚 ...模块2 并行输出 模块3 顶层模块例化 下面是代码 ...
  • [ip核][vivado]串并转换器OSERDES学习

    千次阅读 2018-06-24 13:22:39
    &lt;xlinx FPGA应用进阶 通用IP核详解和设计开发&gt;读书摘录:按照书中的名字,并没有在vivado的ip库中搜索到这一个ip核。
  • 串口转host接口模块

    2020-10-02 16:25:50
    Verilog的串口转host接口模块,一种节省管脚资源的对寄存器控制串并转换模块。实现本功能一共使用了5个模块,分别是串口数据接收、串口数据发送、串口接收数据转host协议数据、host协议数据转串口发送数据,顶层接口...
  • 6 设计功能模块   设计的结构如上图所示,包括发送模块与接收模块,发送模块包括9位...接收模块包括:输出寄存器、8b/10b解码器、comma检测器、串并转换模块、CDR。  在实际的程序设计中,其程序的结构如图所示:
  • 高速FPGA串并收发器SERDES实现ADS6445的AD转换 在使用TI公司四通道、14Bit、最大速率125M的ADS6445。利用Xilinx V5系列器件的串行收发控制器ISERDES的原语来实现数据的接收。 (1)ADS6445基础知识和配置 ADS6445是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,080
精华内容 432
关键字:

串并转换模块