我是靠谱客的博主 敏感烧鹅,最近开发中收集的这篇文章主要介绍FPGA中的串转并,并转串操作前言一、并转串操作二、串转并操作仿真,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 


前言

FPGA中的串并转换操作,可以说是非常灵活的操作了,核心思想就是移位。


串转并就是把1位的输入放到N位reg的最低位,然后N位reg左移一位,在把1位输入放到左移后的reg的最低位,这样循环,就可以得到,以最高位开始传输,最低位传输完成的N位数据了;

并转串就是把并行的N位数据的最高位给1位输出,然后类似的循环左移就可以了。

一、并转串操作

代码:B并 2to C串

module B2C (
    input        clk           ,
    input        _rst          ,
    input        en            ,
    input  [7:0] din           ,
    output       dout           
);//并转串模块 8位输入,1位输出
reg [7:0] in = 'd0;
reg [7:0] data = 'd0;
reg out = 'd0;
reg [3:0]cnt;//计数
assign dout = data[7];//data的最高位接输出线
always @(posedge clk or negedge _rst) begin
    if(!_rst)begin
        out <= 'd0;
        data<= 'd0;
        cnt <= 'd0;
    end
    else if(en) begin
        data  <= {data[6:0],data[7]};//核心也是循环左移
        cnt <= cnt + 'd1;
    end
    if (cnt == 'd7) begin
        data <= din;//这里din是在cnt清零时给到data上传的
        cnt <= 'd0;
    end
end

endmodule

二、串转并操作

代码:C串 2to B并

module C2B (
    input        clk           ,
    input        _rst          ,
    input        en            ,
    input        din           ,
    output [7:0] dout           
);//串转并模块 1位输入 8位输出
reg [7:0] out;
reg [7:0] data;
reg [3:0]cnt; //计数
assign dout = out;
always @(posedge clk or negedge _rst) begin
    if(!_rst)begin
        out <= 'd0;
        data<= 'd0;
        cnt <= 'd0;
    end
    else if(en) begin
        data <= {data[6:0],din};//核心代码左移寄存器
        cnt  <= cnt + 'd1;
    end
    if (cnt == 'd7) begin
        cnt <= 'd0;//8位清零
    end
    if (cnt == 'd0) begin
        out <= data;//单独取out,因为和cnt清零一起取时,差一个节拍
    end
end

endmodule

仿真

这里把5a(01011010)给到B2C并转串上,然后并转串发8次传到串转并上得出正确的值。

最后

以上就是敏感烧鹅为你收集整理的FPGA中的串转并,并转串操作前言一、并转串操作二、串转并操作仿真的全部内容,希望文章能够帮你解决FPGA中的串转并,并转串操作前言一、并转串操作二、串转并操作仿真所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部