- 博客(235)
- 资源 (5)
- 收藏
- 关注
原创 python os
os.getcwd() os.getcwdb() >>> os.getcwd() 'D:\\Users\\dyan\\AppData\\Local\\Programs\\Python\\Python35' >>> os.getcwdb() b'D:\\Users\\dyan\\AppData\\Local\\Programs\\Python\\Python35'
2016-06-06 19:47:25
494
原创 python 网络编程
1 server: bind->listen client:connect server: import socket s = socket.socket() host = socket.gethostname() port = 1234 s.bind((host, port)) s.listen(5) while True: c, addr = s.accept()
2016-06-05 18:04:38
398
原创 python sqlite3
1.建立,连接: >>> import sqlite3 >>> conn = sqlite3.connect('sd.db') >>> curs = conn.cursor()2.提交: >>> conn.commit()每次修改都提交,而不是关闭时才提交。 3.关闭: >>> conn.close()
2016-06-05 13:46:41
391
原创 python 文件操作
1 open 第三个参数是 是否缓冲。False 无缓冲,直接操作硬盘。 True 操作内存,速度快。flash或close 才会更新硬盘数据 >>> f = open('somefile.txt', 'w') >>> f.write("hello. ") 7 >>> f.write("World!") 6 >>> f.close()hello. World! >>> f = open(
2016-06-05 11:14:07
315
原创 python: re
. 可以匹配任何字符(除了换行) [pj]ython 匹配python, jython。[a-zA-Z0-9] 只能匹配一个这样的字符。 [^abc]匹配除了a,b,c之外的字符。 python|perl == p(ython|erl) 子模式 子模式后面加 ?。就是非必须。 >>> r'(http://)?(www\.)?python\.org'(pattern)* 0次以上
2016-06-04 15:52:49
252
原创 python 常用模块
1.告诉解释器哪里找模块: >>> import sys >>> sys.path.append('c:/python')unix要绝度路径 只有第一次导入执行。 >>> __name__ '__main__' 2. 当做包,必须包含一个命名为__init__py的文件(模块) 3. dir看模块里有什么 下划线开始,不是给模块外部用的。过滤: >>> impor
2016-06-03 21:09:20
234
原创 WAVE 包头
1在Mmreg.h里 https://msdn.microsoft.com/en-us/library/ms713498.aspx https://msdn.microsoft.com/en-us/library/ms713497.aspx typedef struct { WORD wFormatTag; WORD nChannels; DWORD
2016-06-03 11:28:20
483
原创 最终解决:idle your python may not be configured for tk
1.安装完python3报告题目错误。 2.按照网上升级匹配的tk,还是错。 3再装一遍python3 就好了。
2016-06-02 14:39:34
1781
原创 div 和 span
1 div的 width 属性只指定内容区宽度。 2. 子孙选择器。 #elixirs blockquote h2 { color: blue; } 3 简写:padding:0px 10px 20px 40px TRBL margin 4个值一样 padding:20px margin:0px 20px; 上下
2016-05-30 21:20:31
280
原创 css 小语法
1 只能对body元素增加样式 2 border-bottom会延伸到页面边缘。 underline只出现在文本下面。text-decoration="underline" 3 希望一个class所有元素都有同一种样式。可以用. .greentea{ /*前面有个点*/ color: green; }
2016-05-29 20:42:03
251
原创 html 小标签
换行 1)都是块元素。 2) 两两总是要一起使用 3)列表中可以在嵌套列表 4)还有定义列表 定义术语 定义描述 >: > 有分号 &: & w3schools www.unicode.org/charts ============================
2016-05-29 12:03:26
386
原创 生成器
任何包含yield 语句的函数称为生成器。 yield不像return 返回值,而是每次产生多个值。每次产生一个值时,函数就会被冻结。被激活后从停止点开始. def flatten(nested): for sublist in nested: for element in sublist: yield element >>> nested =
2016-05-27 18:02:25
193
原创 class2,迭代
super 内置方法:__len__(self), __getitem(self, key) , __setitem__(self, key,value), __delitem__(self, key) property: 4个参数分别是fget, fset, fdel doc class rect: def __init__(self): self.width =
2016-05-27 17:50:47
232
原创 异常
>>> raise Exception Traceback (most recent call last): File "", line 1, in raise Exception Exception >>> raise Exception('overlaod') Traceback (most recent call last): File "", line 1, in
2016-05-27 10:51:18
263
原创 class
>>> from random import choice >>> x=choice(['hello world', [1,2,'e','e',4]]) >>> x.count('e') 1 >>> 让方法变成私有,在名字前面加双下划线: >>> class secret: def __inacc(self): print("cannot") def acc(self):
2016-05-27 10:05:57
341
原创 python 函数
callable判断 一个东西 是否可以调用。感觉没啥用!!! >>> x=1 >>> import math >>> y=math.sqrt >>> callable(x) False >>> callable(y) True __doc__ >>> def square(x): 'calculate the square of the number x' return x*
2016-05-26 20:50:19
257
原创 python语句
>>> values (1, 2, 3) >>> x,y,z=values >>> x 1 >>> y 2 >>> z 3 函数可以返回一个以上的值,打包成tuple。接受数量要一致。 is是同一性预算符。 >>> x=y=[1,2,3] >>> z=[1,2,3] >>> x is y True >>> x is z False >>> 因为x和y绑定到
2016-05-26 17:31:24
203
原创 字典
>>> items = [('name', 'Gumby'), ('age', 42)] >>> d =dict(items) >>> d {'age': 42, 'name': 'Gumby'} >>> d = dict(name="gumby", age=42) key 没有引号 >>> d {'age': 42, 'name': 'gumby'} >>> >>> len(d
2016-05-26 15:34:48
211
原创 string
from string import Template find返回最左端索引,没有-1 >>> 'with moo-moo here'.find('moo') 5 >>> 'with moo-moo here'.find('mooo') -1 可选起始点和结束点,包含第一个index,不包括第二个index,和切片一样。 >>> sub = '$$$ Get rich
2016-05-25 09:36:14
272
原创 元祖
逗号很重要: >>> 42 42 >>> (42) 42 >>> (42,) (42,) >>> 3*(34+3) 111 >>> 3*(34+3,) (37, 37, 37) >>> >>> tuple('abc') ('a', 'b', 'c')
2016-05-25 08:25:00
247
原创 python 写文件
file_ex = open('data.txt', 'w') 如果文件已存在,完全清除现有内容。如果不存在,则创建。 追加到文件,使用 a。 读和写,不清除,用 w+
2016-05-23 07:05:34
293
原创 python 变量赋值的理解
再看python 基础教程,里面讲 x=3 这种赋值。两种解释: 第1种说法是把3 赋值给x, 和c 一样。 第2中说法是把x 绑定到值(或者对象)3 上面。 这种区别像是谁先存在内存中。我觉得第二种说法更好,体现了pyhton 无处不对象的原则。另外getrefcount 也体现了这点。
2016-05-18 06:53:55
474
原创 UVM:10.6.2 config_db 的替代者
1.可以完全不使用config_db 2.config_db 设置的参数有两种,一种是结构性参数,如控制driver是否例化的is_active: agent时指定: 3非结构性的参数: build_phase: 也可在build_phase 之后的任意phase 使用绝对路径进行设置: 1)向sequence 中传递参数,可以像10.3.2节,在vir
2015-07-10 14:47:06
972
原创 UVM:10.6.1 换一个phase 使用config_db
1.config_db::set 的第二个参数是字符串,经常出错,可以通过get_full_name 来获得。对driver 进行设置: 对sequence 某个参数设置,可以: 2.但在build_phase 时,整棵UVM 树还为形成,会引起空指针错误。要想这么做有两种方法: 1)都在new 中create 2)将set 移到connect_phase,由于co
2015-07-10 14:17:37
651
原创 UVM:10.5.2 聚合参数的优势与问题
1.使用聚合参数后,可以将此参数类的指针放在virtual sequencer中: 2.当sequence 要动态改变验证平台某个变量时,如下: 3.甚至可以将interface 也放入聚合参数: 4.这样,无论是driver 还是monitor 中,都可以直接用cfg.vif,不必在使用config_db 来得到interface: 1)因
2015-07-10 12:14:45
776
原创 UVM:10.5.1 聚合参数的定义
1.验证平台用到的参数有两大类: 1)验证环境和DUT 都要用到的参数,通常对应DUT 中的寄存器。10.4.2 2)验证环境独有的。 2.达到项目配置参数可能有千百个。全部用config_db: 3.比较好的方法是放在专门的类里: 经过上述定义后,可以在base_test 中这样写: 省略了绝大多数的set,在driver 如下使用这个聚合参数:
2015-07-10 11:36:18
820
原创 UVM:10.4.2 使用单独的参数类
1.需要一种跨越寄存器的约束。要求2个field 的和大于100。只有上节第二种能实现: 2.由于这个约束对所有测试都适用,因此希望写在寄存器模型的constraint 里: 3.这个寄存器模型使自己手工创建的,没问题。但在IC 中,寄存器模型都是由一些脚步命令自动创建的。在验证平台中,用到寄存器的地方有3个: RTL systemverilog C语言 1)必须时刻保
2015-07-10 10:44:25
772
原创 UVM:10.4.1 使用寄存器模型随机化参数
1.验证两大问题:向DUT 灌激励,为DUT 配置参数。 2.随机化: 3.缩小随机化范围: 1) 2)或者整体: 3)factory 重载:
2015-07-10 10:26:18
1414
原创 UVM:10.3.3 disable fork 语句对原则操作的影响
1.很多计数器的类型是W1C,写1清零。如果正在计数,同时清零操作,可能导致错误。 2.解决; 1)看似解决了问题,但是出现新情况使程序无法终止。disable fork 之后读取寄存器,会发现寄存器正在写,于是一直等待。 2)原因是寄存器模型时原子操作,如果只使用disable fork 野蛮终止,那么此原子操作尚未完成,虽然进程终止了,但是标志位并没有清除,从而出现错误。
2015-07-10 10:02:27
1836
原创 UVM:10.3.2 只将virtual_sequence 设置为default_sequence
1.config_db 最大的问题是不对set 的第二个参数进行检查。 2.为了美观对齐: 3.如下设置default_sequence: 1)i_agt 的default_sequence 没有启动,在i_agt.sqr 调用get_full_name 函数: 4.所以只将virtual sequence 设置为default_sequence。其它所有的sequ
2015-07-10 09:36:54
1377
原创 UVM:10.3.1 心跳功能的实现
1.某些协议中,driver 要每隔一段时间向DUT 发送类似心跳的信号。心跳包与普通包没有本质区别也是普通的transaction。两种选择: 1)在driver 中产生,发送: 2)sequence 实现,无效循环: 上述代码最好不要使用绝对延时,而使用virtual sequence。应该如下: 心跳包优先级最高,所以grab。 2.使用virtua
2015-07-10 09:08:11
916
原创 UVM:10.2.4 错峰技术的使用
1.假如又多一层layer sequence: 1)需要2个时间槽。 2)需要在增加一个umv_wait_for_nba_region,不好。 2.问题的关键是item_done 和try_next_item 在同一时刻被调用,导致了时间槽的竞争。如果能错开,这个问题就不是问题:
2015-07-09 17:28:14
1592
原创 UVM:10.2.3 layer sequence 与try_next_item
1.try_next_item 更加接近实际情况,用的更多: 两个有效的req 之间,总会打印item is null,说明driver 没有得到transaction: 2.ip_sequence 和my_sequence 没有任何延时,my_driver 理应一直得到有效的req,而不该出现得不到的情况,why? 时间槽的概念。 问题出在driver 中的try
2015-07-09 15:20:58
2613
原创 UVM:10.2.2 layer sequence 的示例
1.产生ip_transaction 的sequence 如下: 2.相应的sequencer 如下: 3.这个sequencer 要在my_agent 例化,此时,my_agent 中有两个sequencer: 4.要使用layer sequence,最关键是如何将ip_transaction 交给产生my_transaction 的sequ
2015-07-09 12:12:21
1103
原创 UVM:10.2.1 复杂sequence 的简单化
1.之前的my_transaction 是mac 包,其中的pload 是ip 包,如下: 2.现在要求mac 中指定ip 地址等数据,需要约束mac 包跑咯爱的值: 要对ip_transaction 约束,需自己计算,容易错。 3.可简化: 可重用性不高。 4.加入crc错误,如下: 、 只变了一行。 5.给DUT IP
2015-07-09 11:27:35
817
原创 UVM:10.1.2 可变时钟
1.可变时钟有3种: 1)不同case 时钟不同。 2)同一case 不关心过渡期clk。 3)关心过渡期clk。 2.第一种,使用config_db: top_tb 使用get: 1)my_case0 就是uvm_test_top。 2)使用非直线获取。my_case0的set 是设置给自己的参数,真正使用是在top_tb。 3)由于set 在0
2015-07-09 10:31:09
2589
1
原创 UVM:10.1.1 interface 实现driver 的部分功能
1.之前的interface 非常简单: 2.实际的interface 可以定义任务与函数,还可以always 和initial。 3.8bits 到10bits 在driver 中完成,将串行数据驱动到接口上: 4.在interface 做: 5.相应的,driver 中可以只驱动到interface 的并行接口上即可:
2015-07-09 10:13:49
2786
Simulink建模与仿真》.pdf
2010-08-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅