您当前的位置: 首页 > 

耐心的小黑

暂无认证

  • 1浏览

    0关注

    323博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

整数倍与非整数倍位宽转换电路

耐心的小黑 发布时间:2021-03-10 19:57:58 ,浏览量:1

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

一、整数倍位宽转换简介

位宽转换在项目开发中会经常用到,比如两个模块对接,一个模块是 8bit 信号位宽,另外一个模块是16bit 信号位宽,那么两个模块实现对接就需要一个位宽转换电路,把 8bit 信号位宽转换为 16bit 信号位宽。

位宽转换包括两种,一种是整数倍位宽转换,一种是非整数倍位宽转换,整数倍的位宽转换相对简单,非整数倍的位宽转换比较复杂。

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

在这里插入图片描述 位宽转换模块如下图所示,输入是 8bit 信号,输出是 16bit 信号,有了这个模块,A 模块和 B 模块就可以对接了。 在这里插入图片描述 下面我们来分析下如何设计这个位宽转换,我们假设位宽转换输入信号为数据 a 和 a_vld,a 为 8bit信号,输出信号为数据 b 和 b_vld,b 为 16bit 信号。

我们先来画下位宽转换的输入信号的时序图,如下图所示。

在这里插入图片描述 如上图所示,假设 a 信号会持续四个时钟周期,即 a_vld 在四个时钟周期全部为 1,每个时钟周期都有数据,分别是 0x55、0xaa、0xbb 和 0xcc。而输出信号 b 是 16bit,16bit 数据需要两个 8bit 数据,由此我们可以画出 b 的时序图,如上图所示,我们通过上面的图可以看出,b_vld 都是在 a 传输了两个 8bit 数据后才为高 1 次,a_vld 在四个时钟周期全部为 1,b_vld 只在周期 2 和周期 4 为 1。a 的数据在周期 1 和周期 4 分别是 0x55、0xaa、0xbb 和 0xcc,那么可以得出 b 的数据为 0x55aa 和 0xbbcc,b 的数据只在周期 2 和周期 4有效。

由于我们需要控制 b_vld 的产生,a_vld 每两次有效,才产生一个 b_vld 有效信号,因此我们需要一个标记,标记 a_vld 是否已经两次有效。

二、程序设计

设计一个 8bit 到 16bit 位宽转换电路。

module width_change_8to16 
( 
    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 [15:0] b // output b
);
 
 // reg define 
 
 reg flag ; 
 reg [7:0] a_lock ; 
 
 //=======================================================
 // ------------------------- MAIN CODE -----------------
 //=======================================================
 
 always @ (posedge clk or negedge rst_n) begin
    if (rst_n == 1'b0)
        flag             
关注
打赏
1640088279
查看更多评论
0.0390s