Modelsim 仿真方法总结

时间:2019-05-12 12:59:34下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《Modelsim 仿真方法总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《Modelsim 仿真方法总结》。

第一篇: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图像翻转报告_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函数中,方便以后调用。总之,大作业的成功是我们四个人共同努力的成果,让我们学到了很多课堂上没学到的东西,同时也遇到了很多困难,也有很多分歧,但是最终在一起的努力下我们完成大

作业。

第四篇:altera_modelsim6.1g仿真总结

软件环境说明:quartusII 7.2 sp3+altera_modelsim6.1g

(作者:刘国华)

1,软件的安装

详细请看《如何破解ModelSim-Altera 6.1g.pdf》。(一个注意的地方就是环境变量设置完后一定要重新启动)2,软件的设置

《如何解決在Quartus II无法使用ModelSim-Altera模拟的問題.pdf》。3,用altera_modelsim6.1g做功能仿真,设置地方有3处如下:

接着就是运行仿真软件,进行仿真: 方法有两种:

①编译完后,通过自动运行

②编译完后,手动运行,一般运行Gate Level Simulation

仿真图如下,由于是功能仿真,所以没有延时信息出现:

4,关于do文件的使用技巧问题:

执行的默认脚本在:工程所在目录simulationmodelsim下,例如我的工程:

该do文件的内容为: transcript on if {[file exists gate_work]} { #判断库是否存在,存在的话就先删除

vdel-lib gate_work-all } vlib gate_work

#建立一个库 vmap work gate_work #映射库

vlog-vlog01compat-work work +incdir+.{counter.vo} #编译文件 vlog-vlog01compat-work work +incdir+E:/pratice/verilog/my_counter {E:/pratice/verilog/my_counter/testbench.v}

#编译文件 vsim-t 1ps-L cyclone_ver-L gate_work-L work top_tb #启动仿真 add wave * #把testbench.v的顶层信号加入到波形窗口中 view structure view signals #打开信号窗口 run –all #执行仿真、modelsim窗口指示的就是这个脚本:

如把以下的选项勾起,并指定一个do文件:

这个时候上面那个counter_run_msim_gate_verilog.do文件的脚本就会发生以下变化: transcript on if {[file exists gate_work]} { vdel-lib gate_work-all } vlib gate_work vmap work gate_work

vlog-vlog01compat-work work +incdir+.{counter.vo} vlog-vlog01compat-work work +incdir+E:/pratice/verilog/my_counter {E:/pratice/verilog/my_counter/testbench.v}

vsim-t 1ps-L cyclone_ver-L gate_work-L work top_tb #执行自己写的do文件,这样的话,就可以很好的控制自己想看的信号 do E:/pratice/verilog/my_counter/simulation/modelsim/my.do my.do文件如下: view signal view wave add wave * #将设计文件的内部信号cnt以无符号十进制的形式加入到波形图 add wave-radix unsigned /top_tb/tb_counter/cnt

run –all

5,用altera_modelsim6.1g做布局布线后的仿真(后仿真),设置地方有2处如下:

仿真图如下,可以看到下图明显存在延时信息:

第五篇:仿真机总结

七月仿真机总结

这个月学习班仿真机我们练习了事故处理和冷态启动,本次的练习总结如下:

事故处理过程中我主要是配合锅炉辅机的调整。

一、空预器跳闸,立即关闭各风烟挡板,打掉一台磨,调整炉膛负压正常,视压力快速减负荷,视排烟温度,调整燃烧。仿真机三台磨可以维持排烟温度,正常运行中如果无法维持再打掉一台磨投一层油枪,保证燃烧稳定。

二、两台磨组断煤,立即加大运行磨组出力,同时投AC层油枪,将跳闸磨冷风全开,热风全关,防止磨出口温度高跳闸。视压力减负荷。调整监视好各水位、气温。

三、一台电泵跳闸,立即将另一台电泵出力加到最大,打掉一台磨,快速减负荷,视水位继续减小磨出力。由于一台电泵运行气温波动比较大加强调整。待水位稳定后检查备用泵,处理跳闸泵,尽快恢复。

四、减温水全部中断,立即打掉一台磨,降低其它磨组出力,适当减负荷,同时将减温水调整门关至百分之十左右,防止突然来水气温突降。

冷态启动过程从设备的检查恢复到点火挂闸。期间操作还算顺利,但在最后挂闸后汽机开始冲转没能及时发现,检查不到位,粗心大意。

本次事故过程中我负责加减负荷,但现在小网运行,加减负荷不能大幅度操作,遇到事故也不能随便解除AGC。这也给我们敲响了警钟,在今后遇到问题一定要多考虑,切记盲目操作。加强学习,保证机组的安全运行。

童晓霖

下载Modelsim 仿真方法总结word格式文档
下载Modelsim 仿真方法总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


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

相关范文推荐

    仿真复习总结范文大全

    系统的特性:整体性、管良性、目的性、环境适应性     复习要点 系统仿真的概述 系统仿真中的随机变量 系统仿真的模型  系统仿真的结果分析 系统仿真的方法 系统仿真的应用......

    仿真绘图总结(大全)

    Simulink仿真绘图总结:建议使用方法4,方法1,2不宜使用。 1. 运行仿真模型,用Scope观察结果,用ALT+PrintScreen抓取图形,Ctrl+V粘贴到Word。2. 使用Scope打印功能,在Word中插入图形......

    仿真培训总结

    仿真培训总结 今天是我第一次学习**电厂仿真机系统,我先从冷态启动开始学习。首先是投入水系统,依次投入循环水,开式水,凝输水,汽包上水,除氧器上水,凝汽器上水,凝结水,闭式水,定冷水......

    仿真培训基地总结

    ××发电厂仿真培训基地总结 ××××年将要过去,回顾仿真机一年的培训情况,在各级领导的指导下我们做了大量的工作,取得了一定的成果,简要总结如下: 一、对内培训:加强对内培训,夯......

    仿真教学总结

    仿真教学工作总结 大同电力高级技工学校 韩云 2010年10月 仿真教学工作总结 大同电力高级技工学校 韩云 我于2006年被评为仿真高级指导教师后,主要从事仿真专业课教学,四多......

    运动仿真总结

    一. 用于变形物体或特殊轨迹运动的物体 1.做关联动画时,注意“会变形的零件”要在“装配体中”(插入新零件)建模得到,好让新零件与其他零件相应部位关联,从而使改变这些原有零件......

    仿真培训总结

    仿真培训总结 2011年7月25日至29日,由中国化工教育协会与北京东方仿真软件技术有限公司联合举办的2011年“假期仿真软件培训班”在北京电子科技职业学院举行,共有来自全国十几......

    外贸仿真实验总结

    通过上机实际操作,比较深刻的了解到外贸实务当中的一些工作。通过仿真的实际操作,较为熟悉的掌握了外贸出口的部分技能,以下是对这一学期上课内容的小结: 一、达成交易: 1.与客户......