• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于FPGA的数据位宽转换器设计Verilog代码VIVADO仿真

08/01 09:13
798
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240612102435433.doc

共1个文件

名称:基于FPGA的数据位宽转换器设计Verilog代码VIVADO仿真

软件:VIVADO

语言:Verilog

代码功能:

请用 verilog设计如下电路,输入8bit数据,输出16bit数据,数据有效用 da vld,dbvd表示。

1)clkb是clka的二分频时钟,图示仅为示意图。

Note: clock同步,但是需要考虑二分频相对 da vld拉高有两种情况。

2)数据长度不定,如果是偶数个数据,直接拼接输出,如果是奇数个数据,最后一个数据高8位输出8′h55。

3)两次传输(davd拉高)的时间间隔足够长。

4)dbvd拉高的时序请自行设计,图示仅为示意图。

5)所用资源越少越好。

QQ图片20240612102259.png

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

1. 程序文件

2. 程序编译

3. Testbench

4. 仿真图

输入偶数个数时

输入奇数个数时

包含程序内部变量的仿真图(偶数输入)

包含程序内部变量的仿真图(奇数输入)

部分代码展示:

`timescale?1ns?/?1ps
//////////////////////////////////////////////////////////////////////////////////
//?Company:?
//?Engineer:?
//?
//?Create?Date:?2019/08/29?21:02:46
//?Design?Name:?
//?Module?Name:?data_conversion
//?Project?Name:?
//?Target?Devices:?
//?Tool?Versions:?
//?Description:?
//?
//?Dependencies:?
//?
//?Revision:
//?Revision?0.01?-?File?Created
//?Additional?Comments:
//?
//////////////////////////////////////////////////////////////////////////////////
module?data_conversion(
????input?clka,
????input?clkb,
????input?rst_n,
????input?da_vld,
????input?[7:0]?da,
????output?reg?db_vld,
????output?reg?[15:0]?db
????);
reg?da_vld_sync=0;
reg?[7:0]?da_sync=8'd0;
//将输入信号同步于clka
always@(posedge?clka)
begin
????da_vld_sync<=da_vld;
????da_sync<=da;
end
reg?data_cnt=0;//数据计数,用于判断输入数据的高位低位和奇偶
always@(posedge?clka?or?negedge?rst_n)
????if(!rst_n)
????????data_cnt<=0;//复位
????else
????????if(da_vld_sync)
????????????data_cnt<=~data_cnt;//data_cnt为1是对应高位位置,为0时对应低位位置
?????????else
????????????data_cnt<=0;
reg?[7:0]?da_sync_delay=8'd0;
//将da_sync延迟以周期,移到低位
always@(posedge?clka)
????da_sync_delay<=da_sync;
reg?[15:0]db_data=16'd0;
reg?db_data_vld=0;
reg?db_data_vldbuf=0;
//数据高低位组合到一起
always@(posedge?clka)
????if(data_cnt==1?&&?da_vld_sync==1)begin//若data_cnt==1?&&?da_vld_sync==1表示为正常高位低位
????????db_data<={da_sync,da_sync_delay};
????????end
????else?if(data_cnt==1?&&?da_vld_sync==0)begin//若data_cnt==1?&&?da_vld_sync==0表示最后一个数为奇,高位用8'h55表示
????????db_data<={8'h55,da_sync_delay};
????????end
????else
????????db_data<=16'bz;//否则输出高阻状态
//将da_vld_sync结果2级触发器延迟2周期得到db_data_vld
always@(posedge?clka)
begin
????db_data_vldbuf<=da_vld_sync;
????db_data_vld<=db_data_vldbuf;
end????????
//将db_data_vld同步于clkb
always@(posedge?clkb)
????if(db_data_vld)
????????db_vld<=1;
????else
????????db_vld<=0;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=853

  • 2-240612102435433.doc
    下载

相关推荐