Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出

这篇具有很好参考价值的文章主要介绍了Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近在做sobel、canny边缘检测需要使用shift_ram做3*3卷积模板,在这一块纠结过一阵子,最后还是想写篇博客沉淀一下。这篇博客就举例记录一下: mif文件输入shift_ram ip核,生成2条tap查看输出效果

1.创建mif文件,通过ROM ip核调用该mif文件

1.1创建mif文件

   新建mif文件,保持默认的256字数和8位字长
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出

1.2顺序填充mif文件

  可以使用mif生成软件,也可以按照下图所示
  顺序填充mif,按照顺序填充的好处在于,modelsim仿真时,可以更方便查看结果
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出  保存为mif文件,等待ROM ip核调用

1.3创建ROM ip核调用mif文件

Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出下图中按照mif文件的大小来配置ROM的大小
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出
下图中的‘q’out port可选可不选,区别在于,勾选之后‘q’数据会被存入寄存器,由此带来一个时钟信号的延迟
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出

2.计数器读取mif文件中的数据

2.1写一个0-15的循环计数器

这里以0-15的计数器为例,方便查看modelsim仿真数据,当然也可以配置成其他的
module counter(
	input clk_in,               //时钟信号
	input rst_n,                //复位信号
	output reg [7:0] cnt,       //计数值,在后续步骤中,这个cnt也可以作为ROM地址
	output reg shift_en         //进位信号,在后续步骤中,也可以做输出使能,
);

//0-16循环计数,计满时
always@(posedge clk_in or negedge rst_n)
begin
	if(!rst_n)
		begin
			cnt <= 8'b0;
			shift_en <= 1'b0;
		end
	else
		begin                        //8'd16表示8位二进制数,大小为16
			if(cnt >= 8'd16)
				begin
					cnt <= 8'b0;     //等于16的瞬间被置为0,因此是0-15的计数器
					shift_en <= 1'b1;
				end
			else
				cnt <= cnt + 1'b1;
		end
end
endmodule

2.2实例化ROM ip核、调用计数器模块

MY_ROM	MY_ROM_inst (
	.address ( cnt ),
	.clock 	( clk_in ),
	.q 		( in )
);
counter counter_inst(
	.clk_in ( clk_in ),
	.rst_n ( rst_n ),
	.cnt ( cnt ),	//ROM地址
	.shift_en ( shift_en )		//输出使能
);

3.从mif中读取出来的数据传入shift_ram ip核

3.1创建shift_ram ip核

Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出
Shift_ram配置说明
ROM输出的数据是8位的,所以要输入Shift_ram的话,shift_in需要配置为8位
这里选择2条taps输出,另一条是shiftout,所以一共是3条输出
distance根据需求配置,例如,输入一张像素是100*120的图片,那么distance可以配置成100
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出

3.2实例化Shift_ram ip核

shift_register shift_register_inst(
	.clk_in ( clk_in ),
	.rst_n ( rst_n ),
	.shift_en ( shift_en ),
	.in ( in ),				//从ROM输入的数据

	.shiftout0 ( shiftout0 ),
	.shiftout1 ( shiftout1 ),
	.shiftout2 ( shiftout2 )
);

4.modelsim仿真查看shift_ram输出数据

4.1生成TestBench模板

Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出

4.2顶层文件添加激励、工程添加仿真文件

4.2.1顶层文件添加激励

`timescale 1 ns/ 1 ns
module shiftram_vlg_tst();
// test vector input registers
reg clk_in;
reg rst_n;
// wires                                               
wire [7:0]  cnt;
wire [7:0]  in;
wire shift_en;
wire [7:0]  shiftout0;
wire [7:0]  shiftout1;
wire [7:0]  shiftout2;
// assign statements (if any)                          
shiftram i1 (
	.clk_in(clk_in),
	.cnt(cnt),
	.in(in),
	.rst_n(rst_n),
	.shift_en(shift_en),
	.shiftout0(shiftout0),
	.shiftout1(shiftout1),
	.shiftout2(shiftout2)
);
initial                                                
begin
	clk_in = 0;
	rst_n = 0;
	#100 rst_n = 1;
end
always #10 clk_in = ~clk_in;
endmodule

4.2.2工程添加仿真文件

shiftram_vlg_tst这个提前复制出来,后面要用
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出

4.3modelsim仿真

Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出
Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出
工程链接点我点我点我!文章来源地址https://www.toymoban.com/news/detail-435733.html

到了这里,关于Shift_RAM ip核的使用——ROM调用mif文件、传至Shift_RAM输出的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用MATLAB生成FPGA调用的coe和mif文件的方法整理

    使用MATLAB生成FPGA调用的coe和mif文件的方法整理 在FPGA设计中,常需要使用初始化文件(coe或mif)来初始化内部存储器或配置寄存器。MATLAB提供了方便的工具和函数来生成这些初始化文件。本文将介绍如何使用MATLAB生成coe和mif文件,并提供相应的源代码示例。 生成coe文件 coe文件是

    2024年04月09日
    浏览(42)
  • 【PyCharm Community Edition】:分析map文件统计RAM及ROM的使用

    当我们的编译器不方便统计代码的RAM及ROM的使用总数量时,我们就需要分析.map文件,手动统计其具体使用量。 当我们需要选择不同文件做相同的逻辑处理时,我们就会用到一种遍历的方法,来获取需要被选择的文件(比如.map文件);在python标准库中遍历文档主要是用到的方

    2024年02月09日
    浏览(38)
  • [FPGA IP系列] FPGA常用存储资源大全(RAM、ROM、CAM、SRAM、DRAM、FLASH)

    本文主要介绍FPGA中常用的RAM、ROM、CAM、SRAM、DRAM、FLASH等资源。 RAM(Random Access Memory)是FPGA中最基本和常用的内部存储块,根据不同架构可以实现不同容量,最大可达几十Mb。 FPGA中的RAM主要包括: 分布式RAM:存在于逻辑块(LE)中的小容量RAM,通常为几百比特到几千比特。 块RAM:F

    2024年02月12日
    浏览(44)
  • 【FPGA】七、IP核的调用

    文章目录 前言 1、PLL简介 2、PLL工作原理 3、PLL实验 3.1、PLL的调用 3.2、程序与仿真 总结 前言         在我们进行FPGA项目设计中,简单的工程我们可以自己手动去设计与编写,但是如果工程较为复杂,我们完全自己去设计编写的话效率就太低了。所以在进行FPGA设计当中,常

    2024年02月08日
    浏览(41)
  • vivado中时钟ip核的调用

    时钟ip核(MMCM PPL),MMCM(混合模式时钟管理)和PPL(锁相环)是FPGA内部的时钟资源。 作用:对时钟网络进行一个系统级的时钟管理和偏斜控制,具有时钟倍频、分频、相位偏移等功能 一、7系列FPGA高层次时钟结构视图     Clock Region :区域时钟。 Clock Backbone :全局时钟线

    2024年01月19日
    浏览(42)
  • 【Lattice FPGA 开发】IP核的调用

    本文介绍Diamond开发软件进行IP核调用与对应官方文档查找方法。 Diamond软件中,根据所选目标FPGA器件型号的不同,调用IP核的方式不同。共两种:一种是“IPexpress”;另一种是“Clarity Designer”。 IPexpress调用IP核: Clarity Designer调用IP核: 接下来分别对两种情况的调用进行说明

    2024年04月12日
    浏览(47)
  • 告诉你如何从keil工程知道使用了多少RAM和ROM空间

    我们常常在使用一款芯片的时候往往都会考虑芯片的RAM和ROM大小,因为这觉得了我们的很多功能,虽然可以采用外置的FLASH以及RAM芯片来扩展,但是无论使用了外置还是内置的空间,我们都需要去了解我们工程中使用了多少的RAM空间以及多少ROM空间。 今天我们就来分享一下

    2024年02月14日
    浏览(34)
  • #FPGA(IP_RAM 调用 )

    1.IDE:Quartus II 2.设备:Cyclone II  EP2C8Q208C8N   3.实验:调用单端口RAM仿真读取写入 4.时序图: 5.步骤: (1)添加一个初始化文件做对比,255递减到0(HEX文件) (2)仿真时出现报错,为配置的ram的.v文件没有添加,按如下方式解决。   6.代码: ram_ctrl.v tb_ram_ctrl.v  

    2024年02月19日
    浏览(35)
  • FPGA中FIFO的应用(三)——Vivado FIFO IP核的调用

    ⭐️作者简介: 小瑞同学 ,一个努力精进的 FPGA 和通信学习者。 🍎个人主页:小瑞同学的博客主页 🌻个人信条:越努力,越幸运! ⏰日期:2023.12.6 🔍来源:自学经历 📖文章内容概述:简单介绍了 FIFO IP核 常用参数的配置,通过仿真分析了异步IP的 读写数据 过程。 连载

    2024年01月18日
    浏览(40)
  • COE文件与MIF文件使用方法

    在FPGA开发中,COE文件和MIF文件是常用的存储器初始化文件。COE文件和MIF文件都用于导入存储器ROM或RAM的存储数据,但是它们的格式和语法有些不同。本文将介绍COE文件和MIF文件的使用方法。 COE文件是一种常用的存储器初始化文件格式,常用于Xilinx Vivado软件中。COE文件可以包

    2024年02月02日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包