当前位置:网站首页 >> 作文 >> modelsim 脚本精选(五篇)

modelsim 脚本精选(五篇)

格式:DOC 上传日期:2023-04-27 19:20:43
modelsim 脚本精选(五篇)
时间:2023-04-27 19:20:43     小编:zdfb

每个人都曾试图在平淡的学习、工作和生活中写一篇文章。写作是培养人的观察、联想、想象、思维和记忆的重要手段。相信许多人会觉得范文很难写?下面我给大家整理了一些优秀范文,希望能够帮助到大家,我们一起来看一看吧。

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能自动map到已经编译的这些库上。先去掉只读属性,在[library]和[vcom]之间加上:库名=库路径[绝对路径或者相对路径],相对路径是相对于modelsim安装路径,modelsim安装路径用$model_tech表示。

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

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

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

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

next,选择语言:

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

netx-> next,选择输出路径,launch compile process,等待编译完成。只读属性。至此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)或*(vhdl);

a)quartusii 里面设置重新把generate netlist for functional simulation only 设置成off。

b)指定延时文件

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

进行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 _tb : 这是没有调用ip core时的仿真命令,注意后面的参数top_tb必须为testbench中的模块名。布局布线后仿真是这里要指定延时文件,vsim-l altera_lib-novopt-sdfmax /top_tb/top= _tb g).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/ #file delete../simulation/modelsim/

echo “***************** copy temp file *********************************” #file copy../source/../simulation/ #file copy../simulation/modelsim/../simulation/

echo “***************** start to simulation **************************” #-pli

---for debussy #-sdfmax /top_tb/top=

-----for post synthesis sim

vsim-l altera_lib-novopt _tb

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

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

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

echo “***************** delete temp files ***************************” #file delete../simulation/ #file delete../simulation/modelsim/ ////////////////////////////////////////////////////////////////////////////////

附件三、file.f模板

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

//../simulation/modelsim/

-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}

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

modelsim 脚本篇二

modelsim的自动化脚本仿真平台

自动化仿真平台由tcl语言搭建,大规模设计使用此平台让仿真便捷不少。大体上用tcl语言进行modelsim仿真的流程如下:

1.建立库

2.映射库到物理目录 3.编译源代码 4.启动仿真器 5.执行仿真 tcl语言的语法

vlib :建立库。格式 vlib

。库名缺省值是work vmap:映射逻辑库名,将逻辑库名映射到库路径。语法格式vmap work

vdir:显示指定库内容。语法格式vdir –lib

vlog:编译verilog源代码,库名缺省时编译到work,文件按顺序编译。语法格式vlog –work

.v

.v vcom:编译vhdl源代码,库名缺省时编译到work,文件按顺序编译。语法格式 vcom –work

.vhd

.vhd vsim: 启动仿真器。语法格式vsim –lib

vhdl vsim top_entity top_architecture 仿真entity/architecture对也能选择一个结构 verilog vsim top_levela top_level2 仿真多个top级模块 vsim命令的参数

-l

:后面跟上仿真的库名

-t

:指定仿真的时间分辨率;单位可以是{fs,ps,ns,ms,sec,min,hr}如果用了verilong的`timescale指令,将使用这个设计中的最小时间精度;时间进度可选项(缺省是ns)-sdfmin |-sdftyp|-sdfmax

=

:注释sdf文件;是可选项;使用实例名也是可选项;如果没有使用,sdf用于顶级

add wave /tb/ * :该命令作用是将tb.v中模块tb下所有的信号加到波形文件中,注意*前要加空格 run: 执行命令。语法格式run

按照timesteps指定的时间长度执行仿真 run命令的参数:-

指定运行的timesteps数量,单位可用{ fs,ps,ns,ms,sec }-step :到下一个hdl状态的的步骤-continue:继续上次在-step或断点后的仿真-all:一直运行 所需文件

除了本身的设计文件之外,此仿真平台还要有以下文件:

tb.v: 测试激励文件

glbl.v: 使用xilinx ipcore的就需要此文件 define.v: 定义了全局变量

: 脚本文件,文件 : 主要的控制文件 src.f: 设计文件的路径列表

cfg.f: ise安装目录下verilog库文件的路径

下面为各个文件的内容

vsim-do “do ;” 2. quit-sim vlib work vlog-f src.f-f cfg.f../src/tb.v vsim-t ps-l xilinxcorelib_ver-l unisims_ver-l secureip-l simprims_ver-l unimacro_ver-l simprim-l unimacro-l unisim-l xilinxcorelib log-r /* view signals wave # do add wave/top/ * run –all

.f(不需要)

+licq_all+ +access+r-o0-work work +libext+.vmd+.v-y g:/iselib14_5/secureip-y g:/iselib14_5/simprims_ver-y g:/iselib14_5/unimacro_ver-y g:/iselib14_5/unisims_ver-y g:/iselib14_5/xilinxcorelib_ver-y g:/iselib14_5/simprim-y g:/iselib14_5/unimacro-y g:/iselib14_5/unisim-y g:/iselib14_5/xilinxcorelib /* included files containing parameters and definitions */ +incdir+../src

.f /* source code */../src/define.v../src/tb.v../src/glbl.v../src/top.v../src/rx/bit_align_machine.v../src/rx/rx.v../src/rx/rx_dut.v../src/rx/rx_top.v../src/tx/ctl.v../src/tx/tx.v../src/tx/tx_dut.v../src/tx/tx_top.v

遇到的问题 error1

这是因为没有仿真glbl.v文件,解决方法vsim中加入glbl。vsim-t ps error 2 是因为编译仿真没有添加glbl.v error 3.因为没有关闭仿真优化,解决方法如下2: 文件的修改

1,添加库的路径

2.关掉自动优化选项

error 4

原因是 文件中没有添加库文件。原来的文件如下

文件如下

error 5

原因:不需要编译cfg.f文件。文件中删除掉 –f cfg.f

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已经对要仿真的目标文件进行编译,注意引脚的分派。文件(网表文件)文件(时延文件)。具体操作过程又有两种方法,一种是通过quartus调用modelsim,文件以及需要的仿真库加到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库中出现了需要仿真的文件。文件编译到work库,并建立相应的资源库。

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

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

再点start simulate对话框的sdf标签。在出现的对话框的sdf 时延文件路径。在apply to region框内有一个“/”,在“/”的前面输入测试台文件名,在它的后面输入测试台程序中调用被测试程序时给被测试程序起的名称。(一般为dut)

b)手动仿真;

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

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

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

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(“”,“rb”);

e=$fread(meme,w);

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

join always begin

m=$fopen(“”);

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中的数值:

仿真后波型:

中的数值:

使用到的软件:

在winhex中的数值:

原图

经verilog转换后的图:

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

度。

其次,中。然后用for语句在每一个clk信号上升沿来临时把翻转后256*256

中。

文件即可得到翻转

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

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

刚接触这个大作业的时候,给人一种很高端的感觉,但也意味着一切都待从头开始,首先就是对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 脚本篇五

煤矿安全生产仿真培训平台

全面提高煤矿职工队伍的安全素质,增强依法自我安全保护的意识,坚持“安全第一、预防为主”的生产方针,促进全国煤矿安全生产状况的稳定好转和优化煤矿生产,北京金视和科技股份有限公司致力于vr技术在矿业领域的研发,结合煤矿领域的实际情况,并联合煤矿开发和安全生产方面的相关高校专家共同研发制成煤矿安全生产仿真培训平台。煤矿安全生产仿真培训平台以煤矿职工安全生产、优化技术设计、安全技能培训和提高矿产效益作为主要目的。利用国际领先的虚拟现实和三维仿真技术开发而成。煤矿安全生产仿真培训平台紧紧围绕着煤矿安全生产,搭建了完整的、系统的、可视化的应用平台。该系统由两大部分构成,分别为理论培训和实战操作培训,提供基于虚拟现实的人机交互演练,大幅度提升学员的实际操作能力和安全防范意识。

产品特点

1、真实准确,知识库丰富

煤矿安全生产仿真培训平台以国家统一的煤矿培训教材《煤矿新工人岗前安全培训教材》为基础,整个系统不但客观的复原教材中的关键知识点,而且还将实际生产操作进行了深度扩展结合,从而提高了系统知识的丰富性,提高了学员对相关操作规程的理解和认识。系统内置的数据库管理模块,可以详细准确的记录所有学员的学习、训练以及考核数据,具有安全生产的规范性和准确性。

2、三维交互

煤矿安全生产仿真培训平台以独特的三维仿真技术将煤矿井下环境完整的呈现,全新的三维仿真交互操作突破了以往传统的教学方式,让学员能够以多种视角对井下环境进行多维度的学习和认识。

3、立体可视化

煤矿安全生产仿真培训平台以国际先进的三维仿真技术为基础平台,搭载定制化开发的立体显示设备,让用户佩戴液晶快门立体眼镜即可在任意环境下呈现井下立体画面。立体显示设备坚固稳定,精致便携,且不受场地限制即可沉浸式体验立体画面。自由操作,煤矿安全生产仿真培训平台包含两种学习模式:顺序模式和自由模式。分别为初级学习和强化训练提供人性化的学习方式。顺序模式可以根据煤矿安全生产的工序流程进行逐步学习,在每项工序开始前会弹出提示框,提示下一步应该执行哪项任务,这样可以帮助学员快速了解相关开采及预防的流程。自由模式可按照学员自身需求,有针对性的对某项任务进行深入学习,而不需要每次都从新开始学习整个工序流程。

4、在线式多人协同

煤矿安全生产仿真培训平台支持多人在线式协同作业,学员通过了解井下相关任务流程后,可同时在线扮演各个工种的角色,通过班长的指挥或者工序的流程完成各自的任务。在没有下井之前便可以在虚拟的环境中进行开采训练,积累开采经验,提前发现问题并及时解决,有效的防止因人为因素引发的矿难事故。

全文阅读已结束,如果需要下载本文请点击

下载此文档
a.付费复制
付费获得该文章复制权限
特价:5.99元 10元
微信扫码支付
已付款请点这里
b.包月复制
付费后30天内不限量复制
特价:9.99元 10元
微信扫码支付
已付款请点这里 联系客服