📄 manchester.do
字号:
set matlabroot ""set socketport "4442"set simulinklink ""set matlablink ""proc setSharedLib {args} { global tcl_platform global matlabroot global simulinklink global matlablink set arch "" if {$tcl_platform(platform) == "unix"} { if {$tcl_platform(os) == "Linux"} { set arch "glnx86" } elseif {$tcl_platform(os) == "Solaris"} { set arch "sol2" } elseif {$tcl_platform(os) == "SunOS"} { set arch "sol2" } else { error "**Error: Unsupported unix platform!" } if {$matlabroot == ""} { set matlabroot "/sandbox/lluo/Adsphw/matlab" } } elseif {$tcl_platform(platform) == "windows" } { set arch "win32" if {$matlabroot == ""} { set matlabroot "S:/Adsphw/matlab" } } else { error "**Error: Unsupported platform (macintosh)!" } set mathlabPath "$matlabroot/toolbox/modelsim/$arch" if {$arch == "win32"} { set simulinklink [file join $mathlabPath simulinklink.dll] set matlablink [file join $mathlabPath matlablink.dll] } else { set simulinklink [file join $mathlabPath simulinklink.so] set matlablink [file join $mathlabPath matlablink.so] }}proc vsimulink {args} { global simulinklink global socketport set foreign [list simlinkserver $simulinklink] if {![catch {lsearch -exact $args -socket} idx] && $idx >= 0} { set socketport [lindex $args [expr {$idx + 1}]] set args [lreplace $args $idx [expr {$idx + 1}]] } lappend foreign \; -socket $socketport set foreign [join $foreign]; set args [linsert $args 0 vsim] lappend args -foreign $foreign uplevel 1 $args}proc vsimmatlab {args} { global matlablink set foreign [list matlabclient $matlablink] lappend foreign \; set foreign [join $foreign]; set args [linsert $args 0 vsim] lappend args -foreign $foreign uplevel 1 $args}proc wrapverilog {args} { set nargs [llength $args] if {($nargs != 1) && ($nargs != 2)} { error "** Error: (wrapverilog) Wrong number of arguments; Usage is wrapverilog modulename or wrapverilog -nocompile modulename" } if {([lindex $args 0] == "-nocompile") && ($nargs == 2)} then { set modulename [lindex $args 1] set compileflag 0 } elseif {$nargs == 1} { set modulename [lindex $args 0] set compileflag 1 } else { error "** Error: (wrapverilog) Wrong arguments; Usage is wrapverilog modulename or wrapverilog -nocompile modulename" } set component [vgencomp $modulename] if {[string first "** Error:" $component] != -1} { error "** Error: (wrapverilog) ModelSim vgencomp cannot find module $modulename" } set modulename [string tolower $modulename] set fname "[string tolower $modulename]_wrap.vhd" set fid [open $fname w] if {$fid == -1} { error "** Error: (wrapverilog) Cannot open file $fname" } puts $fid "----------------------------------------------------------------" puts $fid "-- Module $modulename VHDL Wrapper" puts $fid "--" puts $fid "-- Generated by The MathWorks wrapverilog tcl command" puts $fid "--" puts $fid "-- Generated on: [clock format [clock seconds] -format {%Y-%m-%d %H:%M:%S}]" puts $fid "--" puts $fid "----------------------------------------------------------------" puts $fid "LIBRARY IEEE;" puts $fid " USE IEEE.std_logic_1164.all;" puts $fid "" puts -nonewline $fid "ENTITY $modulename" puts $fid "_wrap IS" set firsteol [string first \n $component] set lasteol [string last \n $component] # Output generics and port map puts $fid [string range $component $firsteol $lasteol] puts -nonewline $fid "END $modulename" puts $fid "_wrap;" puts $fid "" puts -nonewline $fid "ARCHITECTURE rtl OF $modulename" puts $fid "_wrap IS" puts $fid "" puts $fid "$component" puts $fid "" puts $fid "FOR ALL : $modulename" puts -nonewline $fid " USE ENTITY work.$modulename" puts $fid "(ignored);" puts $fid "" puts $fid "BEGIN" set portbeg [string first "port(" $component] if {$portbeg != -1} { puts $fid " u_$modulename: $modulename" puts $fid " PORT MAP (" set portmap [string range $component $portbeg $lasteol] set firsteol [string first \n $portmap] set portmap [string trimleft [string range $portmap $firsteol end]] set portnameend [string wordend $portmap 0] set portname [string range $portmap 0 $portnameend] puts -nonewline $fid " $portname => $portname" set firsteol [string first \n $portmap] set portmap [string trimleft [string range $portmap $firsteol end]] set errcnt 0 while {([string length $portmap] != 0) && ([string index $portmap 0] != ")")} { puts $fid "," set portnameend [string wordend $portmap 0] set portname [string range $portmap 0 $portnameend] puts -nonewline $fid " $portname => $portname" set firsteol [string first \n $portmap] set portmap [string trimleft [string range $portmap $firsteol end]] incr errcnt if {$errcnt == 4096} { error "** Error: (wrapverilog) Failure trying to parse more than 4096 ports for $modulename" } } puts $fid "" puts $fid " );" } puts $fid "" puts $fid "END rtl;" close $fid if {$compileflag} { uplevel 1 vcom $fname }}setSharedLibcatch { wm geometry . 500x200+0+0 }vlib workset vhdlSrcPath "$matlabroot/toolbox/modelsim/modelsimdemos/vhdl/manchester"vcom -performdefaultbinding $vhdlSrcPath/statecnt.vhdvcom -performdefaultbinding $vhdlSrcPath/iqconv.vhdvcom -performdefaultbinding $vhdlSrcPath/decoder.vhdvcom -performdefaultbinding $vhdlSrcPath/manchester.vhdvsimulink work.manchester
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -