您当前的位置: 首页 > 

耐心的小黑

暂无认证

  • 1浏览

    0关注

    323博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

非整数倍的位宽转换电路

耐心的小黑 发布时间:2021-03-10 20:20:27 ,浏览量:1

以下内容摘自:《正点原子逻辑设计指南》

非整数倍的位宽转换与整数倍相比会稍微复杂一些。非整数倍的位宽转换指的是 1.5 倍位宽转换或者 2.5 倍位宽转换等等,比如位宽 8bit,需要转换为 12bit 的位宽转换。

一、简介

非整数倍的位宽转换指的是进行 1.5 倍位宽转换或者其他带有小数倍数的位宽转换设计,非整数倍的位宽转换比较复杂,为什么比较复杂呢?大家可以先思考下,下面我们来进行分析,假设 a 数据位宽为 8bit, b 信号位宽为 12bit,刚好是 1.5 倍的位宽转换,如下图所示,我们可以看出,两个周期的 a 数据才能发送一次b 数据,但是 b 只能发送 12bit 数据,两个周期的 a 数据量有 16bit,还剩下 4bit 数据没有发送完,这 4bit 数据需要和下一个周期的 a 数据继续拼接产生一个 b 数据,1.5 倍的位宽转换刚好是三个 a 数据,产生两个 b 数据信息,如下图所示所示。

在这里插入图片描述 我们来看下非整数倍的位宽转换,如下图所示,一个是 A 模块,一个是 B 模块,一般模块的接口由数据信号和数据有效指示 vld 构成,A 模块的位宽是8bit,B 模块的位宽是 12bit,这两个模块是没有办法直接对接的,中间需要一个位宽转换模块。

在这里插入图片描述 在这里插入图片描述 下面我们来分析下如何设计这个位宽转换,我们假设位宽转换输入信号为数据 a 和 a_vld,a 为 8bit信号,输出信号为数据 b 和 b_vld,b 为 12bit 信号。

我们先来画下位宽转换的输入信号的时序图,如下图所示。 在这里插入图片描述 如上图所示,假设 a 信号会持续五个时钟周期,即 a_vld 在五个时钟周期全部为 1,每个时钟周期都有数据,分别是 0x55、0xaa、0xbb、0xcc 和0xdd。而输出信号 b 是 12bit,12bit 数据需要 1.5 个 8bit 数据,由此我们可以画出 b 的时序图,如上图所示。

由上图可以看出,b_vld 都是在 a 传输了两个 8bit 数据后才为高 1 次,但是会持续 2 拍,b_vld 在周期 2 和周期 3 都为 1,因为此时有 3 个 8bit 数据,刚好可以传输两个 12bit 数据。在两个 b_vld 产生之后,b_vld 为 0,等待 a 数据继续来,当再次出现两个 a_vld 时,b_vld和 b 数据继续产生,和周期 2 和周期 3 类似。

二、程序设计
module width_change_8to12 
( 
    input clk , // system clock 50Mhz on board
    input rst_n , // system rst, low active 
    input a_vld , // input a_vld
    input [7:0] a , // input a 
    output reg b_vld , // output b_vld 
    output reg [11:0] b // output b
);
 
 // reg define 
 
 reg [1:0] vld_cnt ; 
 reg [7:0] a_lock ; 
 
 //===========================================================================
 // ------------------------- MAIN CODE -------------------------------------
 //===========================================================================
 
 always @ (posedge clk or negedge rst_n) begin
    if (rst_n == 1'b0)
        vld_cnt             
关注
打赏
1640088279
查看更多评论
0.0372s