Dec
26
最近发现了一个传说“有十几年历史”的软件——Proteus。
具体事做什么就不多说了,到处都搜得到,总结起来就是一个类似MultiSim的电路仿真工具,但是可以直接仿真MCU(MCS51, AVR, PIC)和ARM(LPC系列),可以和一些别的工具接口(IAR, Keil等)。
看到有人说他的ARM仿真挺鸡肋的,怎么说呢,个人感觉功能可能不是很完善吧,不过想法却是不错的。
顺着他的想法走下去,我的心中有一个这样子的系统:现在什么专用器件其实都已经有一个或者几个功能完善的仿真器了——模拟电路的,数字电路的,单片机,ARM,FPGA,还有专用于高速电路。不用再花时间去重复劳动,只要创建出一个联系起所有仿真工具的平台,就是解决了一个大大的GAP。
说起来容易,真的做起来其实就很困难了。那些已经在某些领域中占据垄断地位的公司肯定不愿意自己写什么软件去跟别人整合。因此这项艰巨的任务就交给有创新动力的小公司了(很久前听说的一句话:小公司靠创新,大公司靠兼并嘛)。小公司不了解大公司内部的接口,要熟悉各种各样的工具,真是花人力花物力花时间。
我不是学软件的,接下去的东西就是随便想象了:
由于大多数仿真工具的真正核心都是可以用命令行交互的,那么能做的就是从一个GUI界面中得到要传递给各个仿真器核心的参数,然后拿到每个仿真器的结果,最后再拼凑起来。
随便想想,盼望过客们也能发表一下意见。
具体事做什么就不多说了,到处都搜得到,总结起来就是一个类似MultiSim的电路仿真工具,但是可以直接仿真MCU(MCS51, AVR, PIC)和ARM(LPC系列),可以和一些别的工具接口(IAR, Keil等)。
看到有人说他的ARM仿真挺鸡肋的,怎么说呢,个人感觉功能可能不是很完善吧,不过想法却是不错的。
顺着他的想法走下去,我的心中有一个这样子的系统:现在什么专用器件其实都已经有一个或者几个功能完善的仿真器了——模拟电路的,数字电路的,单片机,ARM,FPGA,还有专用于高速电路。不用再花时间去重复劳动,只要创建出一个联系起所有仿真工具的平台,就是解决了一个大大的GAP。
说起来容易,真的做起来其实就很困难了。那些已经在某些领域中占据垄断地位的公司肯定不愿意自己写什么软件去跟别人整合。因此这项艰巨的任务就交给有创新动力的小公司了(很久前听说的一句话:小公司靠创新,大公司靠兼并嘛)。小公司不了解大公司内部的接口,要熟悉各种各样的工具,真是花人力花物力花时间。
我不是学软件的,接下去的东西就是随便想象了:
由于大多数仿真工具的真正核心都是可以用命令行交互的,那么能做的就是从一个GUI界面中得到要传递给各个仿真器核心的参数,然后拿到每个仿真器的结果,最后再拼凑起来。
随便想想,盼望过客们也能发表一下意见。
Dec
26
ML403提供PCB文件,可以用PowerPCB打开。
但是从来没用过PowerPCB,打开后只有component的位置,没有trace走线。
显示trace:Setup -> Display Colors, trace打勾
测量trace长度: 选中一条trace,然后按ql
但是从来没用过PowerPCB,打开后只有component的位置,没有trace走线。
显示trace:Setup -> Display Colors, trace打勾
测量trace长度: 选中一条trace,然后按ql
Dec
22
文本界面下运行ISE的implement工具都有输出报告,如果有很多warning,会导致系统变慢,时间都花在打印错误信息上了,原来综合一小时的设计变成两小时完成。
这个时候,可以尝试:
1、将输出重定向到文本文件,比如map xx > log.txt
2、将工具设置为silent模式:map -intstyle silent (intstyle的另两个选项是ise和xflow)
如果在ISE的GUI界面下操作,可以使用Message filter。
这个时候,可以尝试:
1、将输出重定向到文本文件,比如map xx > log.txt
2、将工具设置为silent模式:map -intstyle silent (intstyle的另两个选项是ise和xflow)
如果在ISE的GUI界面下操作,可以使用Message filter。
Dec
20
有时候,可能ISE会将一个你认为不是时钟的信号认成了时钟,有时加上BUFG,有时甚至通不过布局布线,建议添加XIL_PLACE_ALLOW_LOCAL_BUFG_ROUTING环境变量。
这时候,应该首先考虑:
1、是否在设计中用了EJTAG_CLK的上升沿作为触发信号。
解决方法:请检查这个上升沿是否必须,是不是可以改为时钟为clk而EJTAG_CLK作为Enable信号。
2、如果一定要用上升沿,那么XST就会认为是时钟信号。为了让它继续布线,你可以让它使用BUFG或者设置XIL_PLACE_ALLOW_LOCAL_BUFG_ROUTING,只要资源允许,使用时钟资源是没有多少害处的。
暂时设置环境变量方法我有在以前的Blog中写过
永久设置,请到我的电脑-> 右键 -> 属性 -> 高级 -> 环境变量 -> 添加环境变量
3、设置约束,指定BUFFER类型
具体方法参见XST UserGuide (ISE安装目录下搜索xst.pdf),buffer_type约束。
有时候对一个net设置了buffer_type为普通buffer,XST会有让另一条net占用BUFG,以此类推,构成循环。解决方法是,XST属性里面可以设置这个设计总共使用多少个BUFG。设到一个想要的个数就可以了。
总结:虽然改代码可能被认为是最麻烦的解决方法,但这是最安全的,因为整个设计都会按照你想要的方式进行下去。
这时候,应该首先考虑:
1、是否在设计中用了EJTAG_CLK的上升沿作为触发信号。
解决方法:请检查这个上升沿是否必须,是不是可以改为时钟为clk而EJTAG_CLK作为Enable信号。
2、如果一定要用上升沿,那么XST就会认为是时钟信号。为了让它继续布线,你可以让它使用BUFG或者设置XIL_PLACE_ALLOW_LOCAL_BUFG_ROUTING,只要资源允许,使用时钟资源是没有多少害处的。
暂时设置环境变量方法我有在以前的Blog中写过
永久设置,请到我的电脑-> 右键 -> 属性 -> 高级 -> 环境变量 -> 添加环境变量
3、设置约束,指定BUFFER类型
具体方法参见XST UserGuide (ISE安装目录下搜索xst.pdf),buffer_type约束。
有时候对一个net设置了buffer_type为普通buffer,XST会有让另一条net占用BUFG,以此类推,构成循环。解决方法是,XST属性里面可以设置这个设计总共使用多少个BUFG。设到一个想要的个数就可以了。
总结:虽然改代码可能被认为是最麻烦的解决方法,但这是最安全的,因为整个设计都会按照你想要的方式进行下去。
Dec
11
一片FPGA内使用多个DCM,时钟从一个clk输入,走到两个DCM的clk_in,然后让DCM操作。
这时,需要注意
1、用CoreGen生成DCM模块的时候,clk_in source是internal,不要他直接连接pin,加buffer。
2、手动例化一个IBUFG,然后把IBUFG的输入连接到两个DCM的clk_in
通常,如果没有设置clk_in source是internal,完全按照使用一个DCM的流程,就会造成clk_in multiple driver。
如果还想让这两个DCM输出的信号相位对齐,这个ISE是不能自动做到的。FPGA只能做到一个DCM的输出是相位对齐的。而时钟pin到两个DCM的路径和DCM输出的路径都有不同的延时,因此对相位还有要求可能就要自己手动调整DCM的位置了。
这时,需要注意
1、用CoreGen生成DCM模块的时候,clk_in source是internal,不要他直接连接pin,加buffer。
2、手动例化一个IBUFG,然后把IBUFG的输入连接到两个DCM的clk_in
通常,如果没有设置clk_in source是internal,完全按照使用一个DCM的流程,就会造成clk_in multiple driver。
如果还想让这两个DCM输出的信号相位对齐,这个ISE是不能自动做到的。FPGA只能做到一个DCM的输出是相位对齐的。而时钟pin到两个DCM的路径和DCM输出的路径都有不同的延时,因此对相位还有要求可能就要自己手动调整DCM的位置了。






