预览模式: 普通 | 列表

SystemVerilog学习笔记(4) ------ 枚举(1)

        SV 中的枚举类型和 C 中的枚举类型差不多, 但 SV 中的枚举的定义比 C 中的要多一种东西, SV 中的枚举可以定义枚举中成员的类型.
        和 C 中一样, SV 中的枚举在不定义数据类型时, 默认为 int. 当然也可以定义为 integer, bit 等整型.

enum {red, yellow, green} color1;
enum integer {red, yellow, green} color2;
enum bit [2:0]
{red, yellow, green} color3;

        枚举中的成员都是隐含有数值的, 默认第一个成员为 0, 后续成员依次递增, 则 color1, color2, color3 中的 red = 0, yellow = 1, green = 3.
        当然我们也可以手动的为这些成员设定值. 

enum {red = 1, yellow = 3, green} color4;

        在这种情况下, 没有赋值的量的值是在它前面一个量的基础上加一的.
        要注意的是, 一个枚举变量中的成员的值不能重复.  

enum {red = 1, yellow, green = 2} color5;     // 错误, 因为 yellow的值也为2

         枚举变量中的成员的值不能超过枚举数据类型的范围.如 int 类型的枚举成员不能赋值为 "z" 或 "x", 向量类型 bit [2:0] 不能表示大于 3'h7 的值. 当枚举成员中有被赋值为 "z" 或 "x" 的, 其后面的成员也必须赋值.
 

enum {red = 1, yellow = 'x, green = 'z} color6;    // int 类型不能赋值为"x"
                                                   // 或 "z"
enum bit [2:0] {red, yellow = 4'h9, green} color7; // 超过了bit[2:0]能表示
                                                   // 的范围
enum integer {red = 'x, yellow, green} color8;     // yellow, green 也必须
                                                  
// 赋值.

        枚举变量中的成员还有一种定义的方法. 语法类似于向量类型的声名 . 

name[N] 声名N个成员: name0, name1, ... , nameN-1. N只能是常量
name[N] = C 声名N个成员: name0, name1, ... , nameN-1, 它们的值从 C 依次递增.N只能是常量
name[N:M] 声名M - N + 1个成员: nameN, nameN+1, ... , nameM-2, nameM-1. N和M只能是常量.
name[N:M] = C 声名M - N + 1个成员: nameN, nameN+1, ... , nameM-2, nameM-1. 它们的值从 C 依次递增. N 和M只能是常量.

 

enum { add=10, sub[2], jmp[6:8] } E1;
enum
{ register[2] = 1, register[2:4] = 10 } E2;

        上面的代码实际可以扩展为:
 

enum { add=10, sub0, sub1, jmp6, jmp7, jmp8} E1;
enum
{ register0 = 1, register1, register2 = 10, register3, register4} E2;

 

分类:FPGA | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1491

SystemVerilog学习笔记(3) ------ string(2)

        string 所特有的几种操作符 ==, !=, >, <, >=, <= 和 C 中的字符串比较是一样的, 这6种操作符两边的量可以是 string, 或者是字符串文本.

        连接操作

   {Str1, Str2, ..., StrN}

        连接操作可以将多个字符串连接起来, StrN 可以是 string 类型的变量, 也可是以字符串文本.

 

        复制操作
 

   {multiplier{Str}}

        复制操作可以把一个字符串进行多次复制,并连接. multiplier 可是是常量, 也可是是变量, 但必须是整数. Str 可以是一个 string 类型的量, 也可是一个字符串文本, 甚至是一个整型的数. 要注意的是, 当 Str 是一个整数时, Str 会先按照整型隐式转换成 string 的方法进行转换, 然后再进行复制操作.例如:
 

   bit [11:0] bit_str= 12'h544;
 string b = {2{bit_str}};     
// b is 32'h05440544, not 24'h544544

 

        string 的一些常用的函数

  function int len() 返回字符串的长度, 空字符串返回0.
  task putc(int i, byte c) 设置第i 个字符为c, 和b[i] = c的效果一样.
  function byte getc(int i) 返回第i个字符, 和 c = b[i] 的效果一样.
  function string toupper() 小写字母转换成大写字母.
  function int compare(string s) 和 C 中的 strcmp 的功能一样.大小写不敏感
  function int icompare(string s) 和 C 中的 strcmp 的功能一样.但大小写敏感
  function string substr(int i, int j) 返回第i到第j之间的子字符串
  function integer atoi()
function integer atohex()
function integer atooct()
function integer atobin()
以十进制, 十六进制, 八进制或者二进制把字符串转换成整数.
  function real atoreal() 字符串转换成实数.
 

task itoa(integer i)
task hextoa(integer i)
task octtoa(integer i)
task bintoa(integer i)
 

将十进制, 十六进制, 八进制或者二进制的整数转换成字符串.
  task realtoa(real r) 将实数转换成字符串.

 

分类:FPGA | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1104

SystemVerilog学习笔记(2) ------ string(1)

         string 在 Verilog 中也有, 但是仅仅只是表现为一个8-bit整数倍的数组, 而在 SystemVerilog 中, string 是尺寸可变, 动态分配并且提供了很多操作字符串的方法的.

 

        string的声名方法

   string variable_name [= initial_value];

         variable_name 为变量名; initial_value 为初始值, 在声名时可有可无. 如果不给初始值, string 变量的默认初值为"", 即一个的空字符串. 例:

   string site_name = "blove_water";

 

         string 中的字符可以通过下标的方式来访问. 例如:

    site_name[0]
  site_name[6]
的值为 "b"
的值为 "w"

 

 

        string 中不能有 "\0", 所有的 "\0" 会被忽略掉. 例如: 

   bit [27:0]   i = 28'h0410042;
 string     str = string'(i);
 $display
("str = %s", str);

        得到的结果是: str = AB;

 

        string 是以 8-bit 为单位的. 当整型转换为 string 时, 如果整型的宽度不是 8-bit 的整数陪, 则在整数的左边补零, 直到宽度为 8-bit 的整数陪. 例如: 

   bit [11:0] b = 12’ha41;  
 string s2 = string’(b);      // sets s2 to 16’h0a41 

 

Tags: SystemVerilog Verilog FPGA

分类:FPGA | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1005

图标练习--- 字符变图标

        前段时间在写一个小软件, 但后来工作的事太多, 也没时间去管, 最后就不了了之. 这本来是打算用作软件的图标的, 但现在也没有用了,就拿出来 show 下. 高手就不必看了, 这个只是自娱自乐的东西啦.
        图标来源是一个隶书的字母 C. 因为不会 illustrator, 所以就用 Photoshop 做了. 我想如果是用 illustrator 的话应该可以做得更清爽的.

Tags: 练习 ICON Photoshop

分类:Gallery | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 984

SystemVerilog学习笔记(1) ------ 整型

        SystemVerilog中的整型数据可以看作是Verilog和C中整型数据的一种杂交, 因些看起来有些象Verilog也有些象C.
        整型可分为基本整型和向量整型(直译的).下面是IEEE1800中定义的.

  integer_type ::= integer_vector_type | integer_atom_type
integer_atom_type ::= byte | shortint | int | longint | integer | time
integer_vector_type ::= bit | logic | reg

        基本整型有: byte, shortint, int, longint, integer, time.
        向量整型有: bit, logic, reg.

        这些整型又为分2态和4态数据类型. 2态即'0', '1'. 4态是在2态的基础上增加了 'Z'  和 'X'. 不论是基本整型还是向量类整型, 它们之中都有2态和4态之分.详细内容可看下表:

  byte 2 态 8-bit 整型, 相当于 C 中的 char signed
  shortint 2 态 16-bit 整型, 相当于 C 中的 short signed
  int 2 态 32-bit 整型, 相当于 C 中的 int signed
  longint 2 态 64-bit 整型 signed
  integer 4 态 32-bit 整型, Verilog 的数据类型 signed
  time 4 态 64-bit 整型, Verilog 的数据类型 unsigned
  bit 2 态向量类整型  
  logic 4 态向量类整型  
  reg 4 态向量类整型, Verilog 的数据类型  

        SystemVerilog 做为 Verilog 的扩展, 因此在 SystemVerilog 中这些数据类型仍可以使用. 在这些类型之中, int 和 integer 基本上可以看做一样, 只是一个是 2 态,一个是 4 态. (在能只用 2 态的情况下尽量用 int, 因为 2 态数据类型在仿真的过程中可以有更高的效率.) logic 和 reg 在 SystemVerilog 中是相等的, 因为 logic 在字面意义上能够更好的表示 4 态, 而不象 reg 给人感觉不清, 所以尽量的用 logic 代替  reg.
        在 4 态类型转换为 2 态类型时, 'Z' 和 'X' 会转换为 '0'.

        整型还为分有符号和无符号的.用关键字 signed 和 unsigned 表示. 在声名时一定要注意 SystemVerilog 和 C 的不同.
        在 C 中声名一个整数的方法为:
                                unsigned int a;
        而在 SystemVerilog 中声名的方法为:
                                int unsigned a;
 

Tags: SystemVerilog Verilog FPGA

分类:FPGA | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 912

把我的心带回去吧...

        天晚上从健身房回来,和同事再一次谈起了回武汉的事。A君准备这个周末就回去,对B君问道:“有什么东西要我带回去吗?”,B君毫不犹豫的道:“把我的心带回去吧!”。
        当时大家都笑了,笑得很大声。可是想一想,又有什么好笑的呢,只不过是真情流露而已。出门在外谁会没有牵绊呢?
        想回家的不只他一个,谁都想回去。想见见父母,见见朋友。好久没有和家人一起吃顿饭,好久没有和好兄弟们一起聚一聚,好久没有。。。。。。
        曾经听过这样一段话。“若您工作在外,以一年只回家一次计算,如果你的父母还能活30年,那么你们相见的次数最多是30次;如果你的父母还能活20年,那么你们相见的次数最多是20次;如果你的父母还能活10年,那么你们相见的次数最多是10次……数字是多么可怕而又真实。学业、事业故然重要,但与父母相处的日子更重要,不要总因为这样那样的理由或籍口而退迟回家多陪陪父母,小时候父母为我们请了多少假,为什么我们就不能请个假抽个空常回家看看?”
        不过我们还是幸运的,至少一年不只回家一次。
        我想也应该回家一趟了。

Tags: 事儿 思念

分类:Something | 固定链接 | 评论: 2 | 引用: 0 | 查看次数: 1384

最近比较烦

        知道为什么,最近总是感觉很烦燥。总觉得事太多,但又不想去做。是深圳这边的天气?是这里的环境?还是自己有段时间没有回家了?
        这几个星期过得很快,觉得5天的时间只是一瞬间。快点好啊,可以快点发工资,但问题是也会快点交房租。希望总是会伴随着失望的,所以不想再去希望什么啦。枯燥无味的生活已经让人变得麻木了,对人情麻木,对生活麻木,对社会麻木。。。。。。

Tags: 生活 深圳

分类:Something | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1110

以前设计的首页

        个是先前做的个网站首页,今天翻电脑时找出来的。中间那东西的原型是马桶

 

Tags: 练习

分类:Gallery | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1250