verilog图像翻转报告_modelsim仿真

时间:2019-05-14 04:21:59下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《verilog图像翻转报告_modelsim仿真》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《verilog图像翻转报告_modelsim仿真》。

第一篇:verilog图像翻转报告_modelsim仿真

Verilog大作业

系名信息工程系 专业电子科学与技术 6010202036-李贝 6010202043-王玉斌 6010202034-解海洋 6010202035-冷健 指导教师史再峰

2012年 10 月 27 日

BMP(全称Bitmap)是Window操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图 像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。组成

典型的BMP图像文件由四部分组成:

1:位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;

2:位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;

3:调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;

4:位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。对应的数据结构

1:BMP文件组成

BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。

图像文件头

1)1-2:(这里的数字代表的是“字”,即两个字节,下同)图像文件头。

0x4d42=’BM’,表示是Windows支持的BMP格式。(注意:查ascii表B 0x42,M0x4d,bfType 为两个字节,B为low字节,M为high字节所以bfType=0x4D42,而不

是0x424D,但注意)2)3-6:整个文件大小。4690 0000,为00009046h=36934。

3)7-8:保留,必须设置为0。4)9-10:保留,必须设置为0。

5)11-14:从文件开始到位图数据之间的偏移量(14+40+4*(2^biBitCount))。4600 0000,为00000046h=70,上面的文件头就是35字=70字节。

位图信息头

6)15-18:位图图信息头长度。

7)19-22:位图宽度,以像素为单位。8000 0000,为00000080h=128。

8)23-26:位图高度,以像素为单位。9000 0000,为00000090h=144。

9)27-28:位图的位面数,该值

总是1。0100,为0001h=1。

10)29-30:每个像素的位数。有1(单色),4(16色),8(256色),16(64K色,高彩色),24(16M色,真彩色),32(4096M色,增强型真彩色)。1000为0010h=16。

11)31-34:压缩说明:有0(不压缩),1(RLE 8,8位RLE压缩),2(RLE 4,4位RLE压缩,3(Bitfields,位域存放)。RLE简单地说是采用像素数+像素值的方式进行压缩。T408采用的是位域存放方式,用两个字节表示一个像素,位域分配为r5b6g5。图中0300 0000为00000003h=3。12)35-38:用字节数表示的位图数据的大小,该数必须是4的倍数,数值上等于(≥位图宽度的最小的4的倍数)×位图高度×每个像素位数。0090 0000为00009000h=80×90×2h=36864。

13)39-42:用象素/米表示的水平分辨率。A00F 0000为0000 0FA0h=4000。

14)43-46:用象素/米表示的垂直分辨率。A00F 0000为0000 0FA0h=4000。

15)47-50:位图使用的颜色索引数。设为0的话,则说明使用所有调色板项。

16)51-54:对图象显示有重要影响的颜色索引的数目。如果是0,表示都重要。彩色板

17)(55+0)到(50-1+2^biBitCount):彩色板规范。对于调色板中的每个表项,用下述方法

来描述RGB的值: 1字节用于蓝色分量 1字节用于绿色分量 1字节用于红色分量

1字节用于填充符(设置为0)对于24-位真彩色图像就不使用彩色板,因为位图中的RGB值就代表了每个象素的颜色。

如,彩色板为00F8 0000 E007 0000 1F00 0000 0000 0000,其中:

00F8为F800h = 1111 1000 0000 0000(二进制),是蓝色分量的掩码。

E007 为 07E0h = 0000 0111 1110 0000(二进制),是绿色分量的掩码。

1F00为001Fh = 0000 0000 0001 1111(二进制),是红色分量的掩码。

0000 总设置为0。

将掩码跟像素值进行“与”运算再进行移位操作就可以得到各色分量值。看看掩码,就可以明白事实上在每个像素值的两个字节16位中,按从高到低取5、6、5位分别就是r、g、b分量值。取出分量值后把r、g、b值分别乘以8、4、8就可以补齐第个分量为一个字节,再把这三个字节按rgb组合,放入存储器(同样要反序),就可以转换为24位标准BMP格式

了。图像数据阵列

18)55(无调色板)-bfSize:每两个字节表示一个像素。阵列中的第一个字节表示位图左下角的象素,而最后一个字节表示位图右上角的象素。

存储算法

BMP文件通常是不压缩的,所以它们通常比同一幅图像的压缩图像文件格式要大很多。例如,一个800×600的24位几乎占据1.4MB空间。因此它们通常不适合在因特网或者其它低速或者有容量限制的媒介上进行传输。根据颜色深度的不同,图像上的一个像素可以用一个或者多个字节表示,它由n/8所确定(n是位深度,1字节包含8个数据位)。图片浏览器等基于字节的ASCII值计算像素的颜色,然后从调色板中读出相应的值。更为详细的信息请参阅下面关于位图文件的部分。n位2n种颜色的位图近似字节数可以用下面的公式计算:BMP文件大小约等于 54+4*2的n次方+(w*h*n)/8,其中高度和宽度都是像素数。需要注意的是上面公式中的54是位图文件的文件头,是彩色调色板的大小。另外需要注意的是这是一个近似值,对于n位的位图图像来说,3 [1] 尽管可能有最多2n中颜色,一个特定的图像可能并不会使用这些所有的颜色。由于彩色调色板仅仅定义了图像所用的颜色,所以实际的彩色调色板将小于。如果想知道这些值是如何得到的,请参考下面文件格式的部分。由于存储算法本身决定的因素,根据几个图像参数的不同计算出的大小与实际的文件大小将会有一些细小的差别。源代码:

`timescale 1ns/100ps module transport;parameter longsize=65554;reg [24:1] meme[longsize:1],b;

integer e,m,n,i,j,w,clk;

always@(*)begin initial fork begin w=$fopen(“lena.bmp”,“rb”);

e=$fread(meme,w);

$fclose(w);end always #50 clk=~clk;

join always begin

m=$fopen(“lena.txt”);

n=0;

always@(posedge clk)

begin repeat(18)begin

n=n+1;b=meme[n];

$fwrite(m,“%h”,b);

end end

always@(posedge clk)

begin

for(j=0;j<=255;j=j+1)for(i=1;i<=256;i=i+1)

begin n=18+256*i-j;b=meme[n];

$fwrite(m,“%h”,b);end end

$fclose(m);

end

end endmodule

仿真后Objects中的数值:

仿真后波型:

转换后在lena.txt中的数值:

使用到的软件:

在winhex中的数值:

原图

经verilog转换后的图:

设计说明书: 首先用$fread系统任务将BMP图片的二进制代码读入存储器meme中;由initial子语句产生clk时钟信号;由于读出的二进制代码的前54个字节是BMP位图的基本代码,因此在对图片进行翻转时前54个字节的位置不变。由于文件格式为256*256*24bit文件,所以后面为256*256个像素,每24位代表一个像素,因为BMP文件的数据是从左到右,从下到上的。也就是说,从文件中最先读到的是图象最下面一行的左边第一个象素,然后是左边第二个象素??接下来是倒数第二行左边第一个象素,左边第二个象素??依次类推,最后得到的是最上面一行的最右一个象素。所以要实现图片的顺时针旋转应该把meme中像素逆时针旋转90

度。

其次,在always子语句中用repeat语句在每一个clk上升沿把meme中的前十八个单元经缓存器b依次读入lena.txt中。然后用for语句在每一个clk信号上升沿来临时把翻转后256*256

个像素经缓存器b依次读入lena.txt中。

最后用WinHex软件把得到的lena.txt文件转换成二进制数据另存为.Bmp文件即可得到翻转

后的图片。李贝大作业工作总结

这次的大作业对我们每一个人都是一个挑战,以前,我们学得知识很死,总不会学以致用,每天都感觉无所事事。通过这次大作业的完成,锻炼了自己的解决问题能力。

刚接触这个大作业的时候,给人一种很高端的感觉,但也意味着一切都待从头开始,首先就是对BMP文件的理解,经过大量的查阅资料,知道了BMP文件的构成,了解了对于256*256*24bit文件,其大小应该为256*256*3+54=196662字节;自此豁然开朗;对于bmp文件和2进制之间转化的问题,经过许多曲折,终于得到了winhex,经过亲手应用,逐渐掌握了这个软件,完成了2进制与bmp文件之间的转化;在编写程序时,同样遇到了很大的阻力,感觉课堂上学的东西完全不够用,通过自己以及团队对verilog语言的进一步学习,知道了其系统函数$fread可以从bmp文件中读取二进制数字,在对时钟信号处理时,对周期的大小也进行了考虑,通过这次大作业,使我更加熟悉了硬件描述语言,对modelsim这款软件的操作也更加熟练啦,懂得了团队合作的重要性!总之,收获很大!

冷健大作业工作总结

终于完成了这次verilog大作业。在完成大作业的过程中,我们小组遇见了不少的难题。遇到很多不会的东西,但是通过我与小组队员的通力合作,通过请教专业的同学,通过上网 7 搜索资料。我们还是完成了。虽然有点不尽如人意。通过这次的大作业,让我们更加深刻的了解了合作的意义。组员之间相互合作,那就无论什么困难都可以解决。这就是团队力量的重要性。还有一点感想就是打铁还需自身硬。自己没有点真功夫是不行的。所以平时一定要多积累,多看书,平时多看书,那么实际生活中就多一条解决途径。就可以少走些弯路,少吃些苦。?还有一点,我们需要仔细和耐性,由于在编写程序的过程中,有一些疏忽和遗漏,总是个别字符出错或者符号出错。回头又得花时间去检查去纠正。所以就必须特别强调细心

和耐心。以上就是我的心得。解海洋大作业工作总结

在这次的大作业,使我懂得了,知识与实践动手能力的不同,虽然经过一段时间的verilog的学习,对语法知识有一定的了解,但真正要自己动手还是有所能力的欠缺。而且还不知道从何入手,还是参考了前辈一些经验,知道了怎么做,按什么顺序做。首先了解BMP位图的格式,还要想到怎么把图读进去等等很多的问题。不过在这次的锻炼中,我对verilog语言有了更深的理解,同时也学到小组合作的精神。

王玉斌大作业工作总结

这次verilog大作业是四个人一起完成的作品,在这次大作业中学到了很多,虽然有些地方和老师的要求,但是在考试的紧张复习中还是完成了大作业。让我学到了很多关于verilog图像相位的知识,对于以后的学习有很大帮助。

在完成作业过程中遇到了很多困难:

首先,我们不知道BMP图片能直接转换为二进制代码,后来跟同学交流了解了可以直接转换为二进制代码,BMP图片输入的时候出现了输入不进去的问题。还有在处理256*256的图片时,我们误认为把一张图片压缩成256*256就可以,后来才发现是剪切,二不是压缩,这样导致后来读出的文件中含有不确定值X。

其次是起初我们仿真不出波形,开始不知道从何下手,通过我们共同努力,从网上,课本,资料查找,发现我们的仿真时间选择过小。导致波形无法显示,最后增大了仿真时间,得到

了波形。

最后,个人觉得有些地方用matlab可以更简便,比如把程序直接导入matlab函数中,方便以后调用。总之,大作业的成功是我们四个人共同努力的成果,让我们学到了很多课堂上没学到的东西,同时也遇到了很多困难,也有很多分歧,但是最终在一起的努力下我们完成大

作业。

第二篇:Modelsim 仿真方法总结

Modelsim 仿真方法总结

Modeling 仿真工具是Model公司开发的。它支持Verilog、VHDL以及他们的混合仿真。Modelsim各版本的使用方法大体一致,Modelsim仿真主要分为前仿真和后仿真。下面来具体介绍modelsim的仿真方法,涉及quartus-modelsim联合(使用)仿真的差异会特别提示。

前仿真与后仿真说明 1.1 前仿真

前仿真也称为功能仿真、行为仿真。旨在验证电路的功能是否符合设计要求,其特点是不考虑延迟(包括门延迟与线延迟),主要验证电路与理想情况是否一致。前仿真需要用到RTL级代码(由源代码经过综合后产生)与Testbench。

1.2)后仿真

后仿真也称为时序仿真或者布局布线仿真。是指在电路已经映射到特定的工艺环境以后,综合考虑门延迟与线延迟的影响,验证电路在一定的时序条件下是否存在时序违规以及能否满足设计构想的过程。需要用到的文件是——从布局布线结果中抽象出来的门级网表、testbench和后缀名为sdo或者sdf的标准时延文件。

注:扩展名为sdo和sdf的标准时延文件包含门延迟与实际布线延迟,能较好的反应芯片的实际工作情况。

二)modelsim仿真主要有以下几个步骤:

(1)建立库并映射库到物理目录;(2)编译源代码(包括Testbench);(3)执行仿真; 解释: ①库:modelsim中有两类仿真库。一种是工作库,默认名为work;另一种是资源库。Work库中存放当前工程下所有已经编译过的文件,所以编译前一定要建立一个work库。资源库存放work库中已经编译文件所要调用的资源,这样的资源可能有很多,它们被存放在不同的资源库内。(例如要想对综合在cyclone芯片中的设计做后仿真,就需要有一个名为cyclone_ver的资源库。)

映射库用于将已经预编译好的文件所在目录映射为一个modelsim可识别的库。(此即是为仿真库建立一个逻辑映像的行为过程,后面会提到,在modelsim中新建库时,create a new library and a logical mapping to it或a map to an existing libraryd的提示)

上述三个步骤是大的框架,前仿真和后仿真均是按照这个框架进行的,建立modelsim工程对前后仿真来说都不是必须的。下面分别介绍每一步的操作。

2.1)建立库

在执行一个仿真前先建立一个单独的文件夹,将操作对象文件放在该文件夹下面。然后启动modelsim软件将modelsim当前路径改动到此文件下。修改方法是File>Change Directory。

注意:上面说的是独立运行modelsim仿真的情况。当采用quartus联合modelsim仿真时,在quartus里面设置第三方EDA仿真工具后,编译成功会自动在quartus工程目录下面创建一个simulationmodelsim的文件夹,此文件夹等同于独立运行moddelsim仿真时最先建立的文件夹。另quartus联合modelsim仿真,modelsim默认路径即为其自动创建文件夹simulationmodelsim下,不必人为更改。

启动modelsim后,建立仿真库。点击file>new>library,出现对话框,选择a new library and a logical mapping to it(已默认),在library name 中输入要创建库的名称。

总结步骤为:启动modelsim-->点击file-->chang directory(如需更改路径的话);再file-->new-->(project)-->library,进行相关设置。即可。

2.2)编写源代码及testbench;在编写目标测试文件(testbench)之前,我们先写完目标文件(既可在quartus中编写,也可以在modelsim中编写),把它编译进工作库。(当然此步也可以等到和测试文件写完以后一起编译)。源代码的编写就不用介绍了,下面介绍编写testbench的两种方法。

A)可以在modelsim内直接编写测试文件,而且modelsim提供各种testbench模板,我们只需更改其中小部分即可。在modelsim中执行File>New>Source>Library或者直接点新建文件,会出现一个verilog(或VHDL)文本编辑页面,编辑测试文件即可。另modelsim中提供各种测试文件模板,直接拿过来用会减少工作量。在verilog文本编辑页面空白处右键点击Show Language Templates,然后会出现一个加载工程,接着在刚才文本编辑窗口左边出现一个Language Templates窗口,双击Creat Testbench会出现一个创建向导,选择Specify Design Unit工作库下,work工作库中的目标文件(即为目标文件配套testbench),点Next。可以指定Testbench的名称以及要编译到的库等,此处我们使用默认设置直接点Finish。这时在Testbench内会出现对目标文件的各个端口的定义还有调用函数接下来,设计者可以自己往Testbench内添加内容了,我们只需更改其中的少量部分,即可完成testbench,然后保存为.v格式即可。按照前面的方法(点中文件后右键,选中compile即进行该文件的编译,或者点击菜单栏中的compile菜单,然后选中要编译的文件)把Testbench文件也编译到工作库中。

B)在 Quartus内编写并编译 Testbench,之后将Testbench 和目标文件放在同一个文件夹下,按照前面的方法把 Testbench 文件和目标文件都编译到工作库中之后。

另如果在工作库中没有该文件(在Testbench文件没有端口的情况下),则在Simulate——>Start Simulate卡片中去掉优化选项Enable optimization之后再重新编译,即可在工作库中找到该文件。

三)执行仿真(分别说明前仿真和后仿真)3.1)前仿真

前仿真相对来说简单些,在执行到上面一步,把需要的文件编译到作库后,我们只需点simulation>start simulation或快捷按钮。会出现startsimulation对话框,点击Design标签选择work库(工作库)中的测试文件然后点ok既可以。在主界面中会多出来一个Objects窗口,里面显示 Testbench 里定义的所信号引脚,在Workspace里也会多出来一个Sim标签。右键点测试文件,选择Add->Add to Wave,然后将出现Wave窗口,现在就可以仿真了。3.2)后仿真

后仿真与前仿真步骤大体相同,只不过中间需要添加仿真库(和所选器件资源库,例如在原理图文件中用到IP core,我们这里就要把相关的_mf.v库加进来。)网表和延时文件的步骤。

后仿真的前提是quartus已经对要仿真的目标文件进行编译,注意引脚的分派。并生成modelsim仿真所需要的.vo文件(网表文件)和.sdo文件(时延文件)。具体操作过程又有两种方法,一种是通过Quartus调用Modelsim,Quartus在编译之后自动把仿真需要的.vo文件以及需要的仿真库加到modelsim中,操作简单;一种是手动将需要的文件和库加入modelsim进行仿真,这种方法可以增加主观能动性,充分发挥modelsim的强大仿真功能。

A)通过quartus调用modelsim;使用这种方法时首先要对Quartus进行设置。先运行Quartus,打开要仿真的工程,点菜单栏的Assignments,点EDA Tool settings,选中左边Category中的Simulation.,在右边的Tool name中选ModelSim(Verilog),选中下面的Run Gate Level Simulation automatically after complication。

Quartus中的工程准备好之后点击start complication按钮,此时modelsim会自动启动,而quartus处于等待状态(前提是系统环境变量中用户变量中PATH要设置好modelsim安装路径)。而且work库中出现了需要仿真的文件。Modelsim自动将quartus生成的.vo文件编译到work库,并建立相应的资源库。

编写测试台程序,最好放在生成的.vo文件所在的目录,以方便在需要手动仿真时使用。点Compile在出现的对话框中选中刚写好的测试文件,然后点Compile按钮,编译结束后点Done,这时在Work库中会出现测试台文件。

点击simulate->Start Simulation或快捷按钮 会出现start simulate对话框。点击Design标签选择Work库下的测试文件,然后点击Libraries标签在Search Library中点击Add按钮,选择仿真所需要的资源库(如果不知道需要选择哪个库,可以先直接点Compile看出现的错误提示中说需要的库名,然后再重复上述步骤)。

再点start simulate对话框的SDF标签。在出现的对话框的SDF File框内加入.sdo时延文件路径。在Apply To Region框内有一个“/”,在“/”的前面输入测试台文件名,在它的后面输入测试台程序中调用被测试程序时给被测试程序起的名称。(一般为DUT)

B)手动仿真;

手动仿真需要自己添加文件和编译库,但可以充分发挥modelsim强大的仿真功能。操作时也要先对quartus进行设置,设置与前面相同只是不要选中Run Gate Level Simulation automatically after complication。然后启动modelsim,将当前路径改到“工程文件夹simulationmodelsim”下。向该文件夹中手动添加所需要的仿真文件,包括.vo文件、相关芯片资源库(后缀_atoms.v)以及原理图情况下的IP core相关资源(后缀-mf.v)。然后在modelsim中点编译,将这些文件编译到工作库下,点击simulate->Start Simulation或快捷按钮 会出现start simulate对话框。这里和A情况相比只有Libraries标签在Search Library时不一样,其余2项都一样。Libraries标签在Search Library下选中simulationmodelsim下work库。后面观察波形与前面方法一致。

两种方法的区别在于,modelsim仿真所需要的.vo文件以及.sdo文件,和资源库的建立方法不同,手动仿真需要自己添加这些文件到工作库下。建议使用手动添加的方式,有利于我们对软件使用的更好理解。

以上方法可供参考,modelsim软件自带的教程也是一个不错的学习路径,在help>SE PDF Documentation>Tutorial里面有详细的功能讲解,使用时可以看看。

第三篇:modelsim仿真小结(最终版)

Modelsim仿真小结

Modelsim的基本仿真流程大致分以下几个步骤:建库、编译工程、前后仿真、调试等。Modelsim仿真既可以在modelsim界面操作,也可以用do文件实现,这里结合学习的教程、网上看到的资料,和实际遇到的一些问题,分别做一整理小结。

1.建库

建库包括Altera库和Xilinx库,同时都包括Verilog和VHDL。这里只建了Verilog库,VHDL和Verilog步骤相同。

对于Altera库主要包括lpm元件库、Mega_Function库atera_mf、altera原语库altera_primitive和各器件系列模型库。前三种是调用altera模块的必备库,第四种是进行综合后功能仿真和布线后时序仿真需要的库,和器件系列有关,只选对应系列即可。

Altera库创建和编译步骤如下:

a)在Modelsim安装目录下新建文件夹,命名altera_lib,以存放编译后的库文件,可以在altera_lib下新建Verilog和VHDL两个子文件夹,分别存放Verilog和VHDL库。b)打开Modelsim,新建Library,file->new->library..c)如下图,创建lpm库,路径E:modeltech_10.1aaltera_libVeriloglpm

d)添加库文件,并编译,compile-> compile …,出现compile source files窗口,library 指定到lpm下,查找范围,选quartus安装目录下… edasim_lib目录里的仿真原型文件:220model.v,点compile,点done。

到此,lpm库建立完毕。

e)同理,建立altera_mf库添加 altera_mf.v,建立primitive库添加altera_primitive.v 建立各系列的模型库,命名可用系列名加_ver“xxx_ver”,也可随意吧,添加各系列的xxx_atoms.v。

这里,也可以把以上库放在一个文件夹,这样做简单,一次就搞定,分开也就是条理清楚,没人去看,所以没必要。

f)修改modelsim.ini文件,为的是让modelsim能自动map到已经编译的这些库上。先去掉只读属性,在[Library]和[vcom]之间加上:库名=库路径[绝对路径或者相对路径],相对路径是相对于modelsim安装路径,modelsim安装路径用$MODEL_TECH表示。

这里所有库都放在E:modeltech_10.1aaltera_lib下,库名是altera_lib,这里只添加一句: altera_lib = E:modeltech_10.1aaltera_lib

g)保存退出,改回modelsim.ini只读属性,防止乱改。至此altera库建立完毕。

Xlinx库创建和编译步骤如下:

相比altera,xilinx建库很方便。xilinx有批处理命令,直接在console命令窗口,输入compxlib命令,调出编译库的窗口,先改掉modelsim安装目录下modelsim.ini只读属性。设置如下图:

Next,选择语言:

Next,选择需要编译的器件:

Netx-> next,选择输出路径,launch compile process,等待编译完成。完成后改回modelsim.ini只读属性。至此xilinx库建立完毕。

2.编译工程

编译工程主要包括:code、testbench、建立工程、建立工程库、映射、编译等。Code主要有code思想和风格,在Verilog部分涉及。Testbench,下边给出一个公用模板,基于这个方便修改,可以根据自己的习惯建一个temp_tb.v。

Modelsim界面编译工程:

a)新建工程:打开modelsim,file-> new-> project..,指定工程名、路径、工程库。

b)Add existing file

c)Add testbench file ….d)编译,compile –> complie all

e)编译语法查错,直到编译通过。至此编译完毕。

3.功能和时序仿真

仿真是在编译的基础上,进行的功能调试,包括综合前功能仿真、综合后功能仿真和布局布线后时序仿真。

Modelsim界面综合前仿真:

a)指定顶层,开始仿真;simulation-> start simulation …,在work 库中,指定testbench,ok,开始仿真。

b)查看仿真结果,打开wave,信号,加入wave

c)运行,查看波形。Run-> run all ….至此,简单的modelsim界面综合前仿真介绍完毕。

Modelsim界面综合后仿真:

综合后仿真需要quartus综合后的网表文件(以altera为例),a)综合后的网表的生成: quartus工程名右键-> setting –> EDA Tool Setting, 双击Simulation,选择EDA软件modelsim,选择输出网表路径,如图

b)More settings ….将 Generate netlist for functional simulation only 设置为ON

c)保存,全编译。

d)

检查一下„/modelsim/Psyth/source 里面,可以发现,已经生成了一个*.vo 文件。这个就是需要的网表文件。(VHDL 的输出网表是*.vho 后缀名的)

e)将vo文件添加到工程,指定TestBench 文件top_tb.v,同前边一样进行仿真。

e)得到的仿真结果

Modelsim界面布局布线后仿真:

布局布线后仿真需要综合网表文件和添延时文件*.sdo(Verilog)或*_vhd.sdo(VHDL);

a)QuartusII 里面设置重新把Generate netlist for functional simulation only 设置成OFF。

b)指定延时文件

这里,region要为顶层文件在tb里的例化名。c)运行,查看波形,波形带有延时

4.用tcl文件.do 进行modelsim仿真

在modelsim中使用do文件是非常方便的进行仿真的一种方法,的项目比较大,特别是几个人分开做的时候,前后模块的联合仿真比较重要,查看的信号比较多,使用了do文件可以自动仿真,省去很多体力活。

下面是编写do文件的一般步骤:

a).quit-sim : 首先退出原来仿真的工程。

b).cd : 设置工作目录的路径,就是你所要建立的工作目录work要放在哪里。

c).vlib work

: 在工作目录下建立一个work目录,请注意不要用操作系统直接新建一 个work的文件夹,因为用操作系统建立的work文件夹并没有modelsim SE自动生成的_info文件。还有个问题是,当你的软件工程里需要用到软核时,可能会需要一些库,但这些库ISE软件中是没有的,此时就需要我们自己新建库了,并映射到当前目录下。我们只自己新建的库一般放在work库前面建立。

d).vmap work : 将新建的work库映射到当前工作目录下(当前目录就是第一步中的目录了)。其他新建的库也要这样的方法映射。

e).vlog +acc –work work “file_path/*.v” : 编译“file_path”目录下所有.v文件,并将 其添加进工作库(work)中,包括IP生成的V文件也要编译的。或者:vlog-f top_tb.f,top_tb.f是.v的列表文件。编译时可以分开单独编译,但是一定要注意顺序,先编译被调用的文件。在综合后仿真和布局布线后仿真的时候,这里添加综合后网表和tb即可。VHDL 用vcom编译。

对于xilinx工程在仿真的时候还需要用到一个文件,那就是glbl.v这个库文件。它是存放在xilinx安装目录下,我们直接编译它并添加时工作库(work)就可以了。特别需要说明的是,在仿真软核的时候,在XPS软件里点击simulation-> generate simulation hdl files会在工程目录中生成一个simulaton文件夹,这个文件夹里的东西就是软核仿真时所需要的仿真文件了。所以我们需把simulaton里所以的v文件都编译一次,这样才能仿真软核。

f).vsim-L altera_lib-novopt work.top_tb : 这是没有调用IP Core时的仿真命令,注意后面的参数top_tb必须为Testbench中的模块名。布局布线后仿真是这里要指定延时文件,vsim-L altera_lib-novopt-sdfmax /top_tb/top=top_v.sdo work.top_tb g).do vawe.do 运行添加wave tcl,这里可以给信号分组,添加颜色,设置波形属性等。h).run –all 设定运行时间,run 1000ms等。

i).在do里可以用file copy/file delete 来对临时文件进行操作。

至此,modelsim仿真总结完毕。这里仅为了简单记录仿真方法和流程,旨在简单明了,对更深入的和更详细的有待进一步补充。

附件 一、testbench 模板

//////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: // Design Name: // Module Name: // Target Device: // Tool versions: // Description: //

// Dependencies: //

// Revision: //

// Additional Comments: //

////////////////////////////////////////////////////////////////////////////////

`timescale 1ns / 1ps module top_tb;

//*************************Parameter Declarations****************************** parameter

CLK_PERIOD = 20;//clk = 50Mhz

//************************Internal Declarations*********************** //************************** Register Declarations ****************************

reg

clk;reg

reset;

//********************************Wire Declarations************************** //******************************Main Body of Code*************************** //--initial reg data--initial begin

end //----------Generate Reference Clock input to tb----------------

initial

begin

clk = 1'b1;end

always

#(CLK_PERIOD/2)clk =!clk;

//--Resets--

initial

begin

rst_n = 1'b1;

#(10*CLK_PERIOD)rst_n = 1'b0;

#(100*CLK_PERIOD)rst_n = 1'b1;

end

//-----------------------------Data Transfer--

initial begin

#(10*CLK_PERIOD);@(negedge data)

begin

end end

//-----------------------------simulation end--

initial begin #(10*CLK_PERIOD);if()

//end sign

begin

$display(“-------TEST PASSED-------”);

end else begin

$display(“

ERROR: TEST FAILED!

”);end $stop;end

//------------------------Instantiate TOP module------------------------

top #(.parameter1

(1),//.parameter2

(0)

//)top_inst(.a(a),);

Endmodule ////////////////////////////////////////////////////////////////////////////////

附件二、do 模板

//////////////////////////////////////////////////////////////////////////////// #!/bin/bash #this bash shell document is used to verilog project simulation #author:iyoyoo

echo “***************** end pre-project ********************************” quit-sim

echo “***************** go to work dir ********************************” #cd / #cd D:/quartus/EP4CE15F/lcd/simulation

echo “***************** start to setup work lib************************” vlib work echo “***************** start to compile ******************************” vlog-f top_tb.f

echo “***************** set up reference library ***********************” vmap altera_lib E:/modeltech_10.1a/altera_lib

echo “***************** delet pre-temp files *************************” #file delete../simulation/pika_ani.mif #file delete../simulation/modelsim/top_v.sdo

echo “***************** copy temp file *********************************” #file copy../source/pika_ani.mif../simulation/ #file copy../simulation/modelsim/top_v.sdo../simulation/

echo “***************** start to simulation **************************” #-pli novas.dll

---for debussy #-sdfmax /top_tb/top=top_v.sdo

-----for post synthesis sim

vsim-L altera_lib-novopt work.top_tb

echo “***************** add signal to vawe **************************” do vawe.do

echo “***************** start to run

******************************” run-all

echo “***************** delete temp files ***************************” #file delete../simulation/pika_ani.mif #file delete../simulation/modelsim/top_v.sdo ////////////////////////////////////////////////////////////////////////////////

附件三、file.f模板

//////////////////////////////////////////////////////////////////////////////// +licq_all+ +access+r

//../simulation/modelsim/top.vo

-for post synthesis simulation

../source/top.v

../simulation/top_tb.v

+libext+vmd+.v-y $QUARTUS_ROOTDIR/eda/sim_lib ////////////////////////////////////////////////////////////////////////////////

附件三、file.f模板

////////////////////////////////////////////////////////////////////////////////

view signals stucture wave onerror {resume} quietly WaveActivateNextPane {} 0

#-color Green for all signal is green #-color Green Blue Yellow Pink Orchid Red Salmon Orange

# top_tb group add wave-itemcolor Blue-noupdate-expand-group top_tb-format Logic-radix hexadecimal /top_tb/*

# sub group add wave-itemcolor Green-noupdate-expand-group sub-format Logic-radix hexadecimal /top_tb/sub/*

TreeUpdate [SetDefaultTree] WaveRestoreCursors {{Cursor 1} {10000 ns} 0} configure wave-namecolwidth 364 configure wave-valuecolwidth 100 configure wave-justifyvalue left configure wave-signalnamewidth 0 configure wave-snapdistance 10 configure wave-datasetprefix 0 configure wave-rowmargin 4 configure wave-childrowmargin 2 configure wave-gridoffset 0 configure wave-gridperiod 1 configure wave-griddelta 40 configure wave-timeline 0 configure wave-timelineunits ps update WaveRestoreZoom {10000 ns} {10000 ns}

////////////////////////////////////////////////////////////////////////////////

第四篇:verilog简易数字频率计报告

一、实验原理

根据原理图,将计数器模块、显示模块、扫描模块、译码器模块等分别做出。其原理是在1S内用待测信号给计数器计数,并在一秒结束时给计数器清零,计出来用缓存器缓存,在数码管中显示出来。

二、方案论证

一、通过50M的时钟进行计数获得精密的1HZ——计数器用Verilog HDL语言实现在1HZ为底电平时计数——门控电路用或门开启——1HZ为高电平时进行数据锁存与显示——利用Verilog HDL语言使前面的0不显示。

计数器用Verilog HDL语言在写代码时可以用复制粘贴的方法可以简便的实现。通过50M的时钟进行计数获得精密的1HZ后只是经过很短的时间内进行计数器的清零及数据的琐存,并且得到的是1HZ的精密时钟。把锁存的数据进行清0的转换后利用分时扫描,后通过数码管译码显示。

说明:

Cnt9999:0000~9999计数器; Buffer:锁存器; Scan:扫描显示 共8个模块

三、实验步骤

一、计数器模块 计数器模块的仿真波形

二、锁存模块

利用32位的D触发器进行储存计数器送给它的数据。在时钟为上升沿的时候触发保存数据。锁存模块的源代码:

module buffer_32(clr,clear,in,out);input

clear,clr;input[31:0] in;output[31:0] out;reg[31:0]

out;always@(posedge clear or negedge clr)

if(!clr)out<=0;

//else if(clear)out=in;

else out<=in;

endmodule

三、转化清零模块 波形仿真波形

module cnt9999(clr,clk,q,c);

input clr,clk;output c;output [15:0]q;reg c;reg [15:0]q;

always @(posedge clk or negedge clr)begin

if(!clr)begin q[15:0]<=0;c<=1'b0;end

else if(q[15:0]==16'H9999)begin q[15:0]<=0;c<=1'b1;end

else if(q[11:0]==12'H999)begin q[15:0]<=q[15:0]+12'H667;c<=1'b0;end

else if(q[7:0]== 8'H99)begin q[15:0]<=q[15:0]+8'H67;c<=1'b0;end

else if(q[3:0]== 4'H9)begin q[15:0]<=q[15:0]+4'H7;c<=1'b0;end

else begin q[15:0]<=q[15:0]+1'b1;c<=1'b0;end end endmodule

四、扫描显示模块

把存储的数据分别分给8个数码管,利用循环扫描即可显示出所要显示的数据。

扫描显示模块的仿真波形

module scan(clk,q);input clk;output [2:0]q;reg

[2:0]q;

always @(posedge clk)

begin

q=q+1;

end

endmodule

四、引脚分配

五、实验总结

频率就是信号在1s内发生相同变化的次数,简易频率计就是基于这个原理设计的。我们先产生一个低电平为1s,高电平为1/50M秒的周期信号clk,用该信号与待测信号相与作为计数器的输入时钟,并把clk的上升沿作为缓存器的开关,把clk的高电平作为计数器的清零信号,这样就能保证缓冲器中存放的始终是待测信号在一秒内的跳变次数,也即待测信号的频率。

实验的原理尽管很清楚,但真正看到实验现象还是经历了一番波折,在写8选1数据选择器的时候,定义模块端口时,由于疏忽,把四位位宽漏写成了1位,结果在数码管上显示的始终只有0和1两种数字。为了改正这个错误,我把程序的主要模块都检查了一遍,结果不管怎么改实验现象都没有出来,这让我郁闷了很长一段时间,原理明明是对的,为什么就没有效果呢?最后我把整个程序都打印出来,一行一行地检查,最后终于找到了症结所在,就是8选1数据选择器的位宽弄错了!经历了这次错误,让我明白了写程序还是不能大意,8选1数据选择器虽然简单,却因为位宽这个小小的错误让我浪费了很长的时间,检查错误时也因为其简单而没有认真对待。

第五篇:数字图像处理图像翻转,平移,缩放

学号:Xb09680112

班级:09通信工程(1)

姓名:项德亮

实验一

图像几何变换

一. 实验目的

1.熟悉MATLAB中的图像处理工具箱。2.熟悉MATLAB中常用的图像处理函数。

3.掌握图像平移、图像旋转和图像缩放的基本原理与实现方法。二.实验设备 微机 三.预习要求

1.认真复习课件里的内容,并熟悉教材中第2章的内容。2.了解imread()、imshow()、imhist()等函数的使用方法。四.实验内容及步骤 实验内容:

1.熟悉MATLAB图像处理工具箱的功能及常用的图像处理函数。

2.打开“Image Processing”工具箱里的Demos,查看“Spatial Transformation”中的第一个例子“Creating a Gallery of Transformed Images”,把所有源代码拷到一个m文件里运行,查看运行结果,给源代码添加注释。然后再改变变换矩阵T里面的参数,再查看运行结果。把改变参数后(每位同学可以任意改变)的m文件保存为SpatialTransformation.m。

3.编程实现图像的平移,平移量应该可调(即用一个向量或两个标量保存平移量),并显示对图像“view”的处理结果。%平移 clear;%读入图像

imori=imread('view.bmp','bmp');imres=imori;[m,n]=size(imori);tx=60;ty=-40;%平移 for i=1:m

for j=1:n

if tx

imres(i,j)=imori(i,j);

else

imres(i,j)=255;

end end end imshow(imres)%显示结果%显示结果

4.编程实现图像的缩放,缩放系数可调,分别用两个变量或一个向量保存水平和垂直方向的缩放系数,并显示对图像“view”的处理结果。clc;sx=1.5;sy=2.0;%读入原始图像

imageOri=imread('view.bmp','bmp');[m,n]=size(imageOri);%求变化矩阵 s=[sx,0,0;0,sy,0;0,0,1];sinv=inv(s);%求变换后的图像大小 m1=m*sx;

n1=n*sy;m2=floor(m1);

n2=floor(n1);imageres=255*ones(m2,n2);%灰度差值 for i=1:m2

for j=1:n2

a=sinv*[i,j,1]';

x=a(1);y=a(2);

g(i,j)=ImageBiInterpolate(y,x,imageOri);

end end

imshow(uint8(g))%输出结果图像

5.编程实现图像绕图像原点的旋转,并显示对图像“couple”的处理结果。有兴趣的同学可以实现绕任意点的旋转。clc;clear;theta=30;%读入原始图像

ImageOri=imread('view.bmp','bmp');[m,n]=size(ImageOri);%求变化矩阵

r=[cos(theta),sin(theta),0;-sin(theta),cos(theta),0;0,0,1];rinv=inv(r);%求变换后的图像大小 m1=m;

n1=n;m2=floor(m1);

n2=floor(n1);imageres=255*ones(m2,n2);%灰度差值 for i=1:m2

for j=1:n2

a=rinv*[i,j,1]';

x=a(1);y=a(2);

g(i,j)=ImageBiInterpolate(x,y,ImageOri);

end end

imshow(uint8(g))

%输出结果图像

五.实验的心得体会

通过这次实验,我发现matlab软件的功能很强大,既能编写程序,完成波形的设计,还可以处理图像的位置,改变图像的大小,旋转图像的角度,学会使用imread()读取图像,imshow()展示图像,使用for语句,完成图像的反复操作,直到得到我们要的图像。

下载verilog图像翻转报告_modelsim仿真word格式文档
下载verilog图像翻转报告_modelsim仿真.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    图像的翻转和旋转教学设计

    图像的翻转和旋转教学案例 教材分析: 本节课所使用课本为河北大学出版的第一册信息技术,本节课内容为第12课《太空娃娃——变形与翻转》的其中的一个课时《翻转与旋转》。我设......

    图像的翻转和旋转微教案

    小学信息技术第一册第三单元活动11《美丽的南极》之 图像的翻转和旋转 一、激趣导入 同学们好,今天,老师和大家一起玩一个拼图游戏。请同学们在桌面上找到拼图游戏文件,并用画......

    一、翻转或旋转图像 教学设计

    翻转或旋转图像 教学设计 1教学目标 让学生在探索中学会画像蝴蝶这样的轴对称图形。学会根据需要对图形进行选定、复制、粘贴与翻转操作。 2学情分析 三年级学生对信息技......

    《图像的翻转和旋转》信息技术教案(五篇范文)

    课题:图像的翻转和旋转 教学目标: 1. 知识与技能:通过操作掌握图像的翻转和旋转工具的使用。 2. 情感态度价值观:培养学生对信息技术的兴趣。 教学重点: 掌握图像的翻转和旋转操作......

    最新仿真实习报告

    目 录一、公司简介„„„„„„„„„„„„„„„„„„„„„„„ 1 二、职责描述„„„„„„„„„„„„„„„„„„„„„„„ 1 三、实习项目„„„„„„„„„„......

    仿真实习报告

    校内仿真综合实习报告 在企业仿真实验中,来自财务、工商、信息等专业的同学形成了ERP小组,我们一、 公司状况与职位描写 小组13人建立了一个生产制造公司,公司的名称叫迪普电子......

    仿真实习报告

    仿真实习报告书 南京工业大学 仿真实习报告书 学 院: 城市建设与安全工程 班级、 学号: 安全100X班XX号 姓名(签名): Dpessi 成 绩: 2012年 11月 1 仿真实习报告书 目录 一.仿真......

    仿真实习报告

    哈工程仿真中心实习报告 姓名:和佳鑫 班级:20121513 学号:2012151307 前言: 仿真在我们印象里一直是“高大上”的,而经过半天的实习和仿真中心成守宇等老师的耐心周到的讲解,我对......