xilinx下modelsim仿真

ise 12.1下测试。
前期工作:
1.程序中找到Simulation Library Compilation Wizard,编译库。
2.找到Xilinx\12.1\ISE_DS\ISE\modelsim.ini,复制[Library]下的库路径到modelsim安装目录下的modelsim.ini中[Library]下,注意先去掉此文件的只读属性。如uni9000_ver = xxx,cpld_ver=…
仿真:
1.Edit->Preferences->ISE General->Integrated Tools中Model Tech Simulator:选择modelsim.exe全路径。
2.新建工程时,Simulator选ModelSim-xxx。
3.要仿真时,New Source增加Verilog Test Fixture或VHDL Test Bench。
4.Design窗口中选simulation,右键Simulate Behavioral Model,选Proess Properties…把Ingore Pre-Compiled Library Warning Check勾选。
5.右键Simulate Behavioral Model,Run。

Quartus II中使用modelsim仿真

1.设置modelsim路径,Tools->Options->General->EDA Tools Options
2.配置EDA Tool和设置NativeLink,Assignments->Settings->EDA Tool Settings->Simulation,Tool Name选modelsim。
3.start compilation.
4.Processing->Start->Start Test Bench Template Writer,生成的文件在Simulation/modelsim目录中。
5.第2步中,NativeLink Settings选中compile test bench,点“TestBences…”进入,Test bench name 任意,Top level module in test bench必须是testbench文件实体名,Design instance name in test bench是实例名,如test i1(..)就是i1。test bench files下面点…,选中testbench文件,点Add
6.Tools->Run EDA Simulation Tool->EDA RTL Simulation。

win7 x64安装未认证的驱动程序

用ftdi或cypress的usb芯片,在win7 x64环境下驱动总是提示未认证,安装不上。搜索得到的方法是:1、使能win7 x64的test mode;2、签名驱动.sys文件。
可以使用http://www.ngohq.com/home.php?page=dseo 这个软件,首先Enable Test Mode,系统重启后, 选择Sign a System File,签名.sys文件,再次安装驱动就可以了。进入test mode后,桌面右下角会出现“测试模式”等字符。

cm205/cm206光驱控制协议

cm205光驱,采用PHILIPS的摇臂光头,据说音质很好,折腾了一个,音质好坏没听出来,不过这个光驱这么多年了,
各种烂碟秒杀。
前面板只有一个按键,就是播放,只能下一首。后面的接口是个16pin的,也不知是什么。拆开查看电路板,控制芯片
是一片M80C154,属8051系列。16pin接口中的1脚接单片机的TXD,3脚接RXD。2,、4、15、16是地,估计能用串口控制,拔
下M80C154的程序芯片,找到老编程器MP100,共享版MP100 for Windows居然只能读0×800字节,又得用ida pro,找到判断读
取长度0×800判断的地方,改大了。
读出后反汇编:
code:1401 mov PCON, #0×80 ; ‘€’ ; Power Control Register
code:1404 mov TH1, #0xFD ; ‘? ; Timer 1 High Byte
code:1407 mov TMOD, #0×21 ; ‘!’ ; Timer Mode Control Register
code:140A mov TCON, #5 ; Timer Control Register
code:140D mov SCON, #0xD0 ; ‘? ; Serial Port Control
code:1410 mov IP, #1 ; Interrupt Priority Register
code:1413 mov TL0, #0×66 ; ‘f’ ; Timer 0 Low Byte
code:1416 mov TH0, #0xFC ; ‘? ; Timer 0 High Byte
根据使用的11.0592晶振,知道串口波特率为19200。
根据发送代码:
code:02B0 send_char: ; CODE XREF: send+11p
code:02B0 ; read_char+3Dp …
code:02B0 mov A, RAM_10
code:02B2 mov C, PSW.0 ; Program Status Word
code:02B4 cpl C
code:02B5 mov SCON.3, C ; Serial Port Control
code:02B7 clr SCON.1 ; Serial Port Control
code:02B9 mov SBUF, A ; Serial Port Buffer
code:02BB ret
知道使用了9位数据。

再看linux中光驱控制的代码,有cm206.c,总结一下控制命令如下,用串口9位方式发送命令,测试了部分有效。
具体命令可以参考cm206.c,例如控制播放,可以使用命令0×30 frame0 sec0 min0 frame1 sec1 min1 02 02来完成。
uch play_command[] = { c_play,
msfp->cdmsf_frame0, msfp->cdmsf_sec0, msfp->cdmsf_min0,
msfp->cdmsf_frame1, msfp->cdmsf_sec1, msfp->cdmsf_min1, 2,
2
};
读出播放位置可以使用命令0×41,返回数据可以参考get_current_q函数。

/* the cm206 command set */
#define c_close_tray 0
#define c_lock_tray 0×01
#define c_unlock_tray 0×04
#define c_open_tray 0×05
#define c_seek 0×10
#define c_read_data 0×20
#define c_force_1x 0×21
#define c_force_2x 0×22
#define c_auto_mode 0×23
#define c_play 0×30
#define c_set_audio_mode 0×31
#define c_read_current_q 0×41
#define c_stream_q 0×42
#define c_drive_status 0×50
#define c_disc_status 0×51
#define c_audio_status 0×52
#define c_drive_configuration 0×53
#define c_read_upc 0×60
#define c_stop 0×70
#define c_calc_checksum 0xe5

#define c_gimme 0xf8

qa350 v2 mod耳放

qa350 v2 mod比qa350贵了300多,看看这个耳放部分。
左边是ad8397,另外2个芯片打磨了,很显然一个是负5v电压产生芯片,估计内阻小一点的,这种芯片就那么几个,查查就知道了。
另外一个是DC/DC转换芯片,估计是为了降低功耗。在意的话直接把它拆了,把F1短接,再把电容补上。

数字音频中的时钟抖动

数字音频中时钟抖动导致的失真,当人耳可闻时,抖动的门限是多少呢?
这篇论文“Detection threshold for distortions due to jitter on digital audio”论文部分内容如下:
1、记录音频为20khz、16位时,理论随机抖动应该小于121.4ps
2、实验
随机抖动 可以听出抖动与没有抖动音质差别的人数
2 ms 23
1 ms 11
500 ns 6
250 ns none

vs.net 2008调试.net出现错误0×80004002

安装了avr studio 5.0后,vs.2008调试.net程序总是出现错误0×80004002,根据系统运行下面命令之一解决:
regsvr32 “C:Program FilesCommon Files (x86)Microsoft SharedVS7Debugmsdbg2.dll”
regsvr32 “C:Program Files (x86)Common Filesmicrosoft sharedVS7Debugmsdbg2.dll”