02-初识Verilog

1.开发环境搭建

需要使用的软件:

  • QuartusII
  • ModelSim
  • Visio
  • Notepad++

2.初识Verilog

2.1 Verilog HDL简介

  • Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图\逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能
  • Verilog语法自由,易学易用,适用于算法级,门级设计,代码简介,发展较快
  • Verilog从C语言发展而来的

2.2 逻辑值

  • 0 -- 逻辑低电平,条件为假
  • 1 -- 逻辑高电平,条件为真
  • z -- 高阻态,无驱动
  • x -- 未知逻辑电平
  • 实际电路中存在0,1,z,亚稳态

2.3 关键字

module example(
  input wire  sys_rst_n,//输入信号
  inout wire sda,//输入输出信号,基本不用
  
  output wire po_flag  // 输出信号
);
  // 只有输入信号是不能直接得到输出信号的
  // 需要通过一些数据和参数对输入信号进行处理,得到输出信号
  // 一般需要对输入信号进行处理之后得到输出信号
  
  // 线网型变量 -- wire可以被看作是物理连接 -- 被综合成物理连线
  wire [0:0] flag;

  // 寄存器型变量 -- 具有对某一时间点的状态进行保持的功能
  // 可综合电路中被综合成寄存器
  reg [7:0] cnt;
  
  // 参数的定义
  // parameter 可以在顶层模块通过实例化对参数进行修改
  parameter CNT_MAX = 100;

  //localparam -- 只用在模块内部,不能在实例化的时候进行修改
  localparam CNT_MAX = 100;
  
  // 模块的实例化
  example
  #(
    .CNT_MAX (8'd100) // 实例化时参数可以修改
  ) 
  example_inst
  (
    .sys_clk (sys_clk),
    .sys_rst_n (sys_rst_n),
    .po_flag (po_flag)
  );

  /*
    常量
    表示方法: [换算为二进制数之后的位宽]'[进制符号][与数值对应的进制数]
    8'd171
    d -- 十进制
    b -- 二进制
    h -- 十六进制
    
    不写位宽 -- verilog会自动进行匹配
    总位宽大于实际位宽,自动补0,总位宽小于实际位宽,则自动截断左边超出的位数
    d'7  8'd7   -- 8'b0000_0111   前面补5个0
    2'd7 换算位二进制是 2'b11 (7换成二进制是111),总长度位2位,所以截掉左侧的部分
    直接写参数 100 ,表示位宽为32bit的十进制数100
  */

  // 赋值方式
  // 阻塞赋值 = 
  // 阻塞赋值可以看作是顺序执行,每条语句执行完成之后才能执行下一条语句
  a = 1;
  b = 2;
  c = 3;
  begin
    a = b;
    c = a;
  end
  a = 2;
  b = 2;
  c = 2;
  // 非阻塞赋值 <= 并行执行
  a = 1;
  b = 2;
  c = 3;
  begin
    a <= b;  // 同一时刻,这两条语句是同时执行的
    c <= a;
  end
  a = 2;
  b = 2;
  c = 1;

  // always语句
  always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
      cnt <= 8'b0; // 进行寄存器复位
    else if (cnt == CNT_MAX) // 寄存器中的值记到最大的时候,维持最大值
      cnt <= CNT_MAX;
    else
      cnt <= cnt + 8'd1;    // 每个周期都加1
  

  // assign语句
  assign po_flag = (cnt == CNT_MAX) ? 1'b1 : 1'b0;
endmoudle

2.4 算术运算符

+
-
* -- 一般不用
/ -- 一般不用
% -- 求余数,两边都为整型数据

2.5 归约运算符\按位运算符

  • & -- 既可以作为单目运算符又可以作为双目运算符
// & 作为单目运算符,&m,将m的所有bit相与,得到结果是1bit
4'b1111 = 1&1&1&1 = 1'b1
4'b1101 = 1&1&0&1 = 1'b0

// & 作为双目运算符表示按位与,m&n,是将m的每个bit与n的每个bit相与,在运算的时候保证m和n的bit数相等,最后结果位数和m(n)的bit数相等
4'b1010&4'b0101 = 4'b0000
  • &,^,^,|,~| -- 这些运算符都有相同的看法

2.6 逻辑运算符

  • &&/||/! -- 与或非三种逻辑运算,返回值为0或者是1
  • 逻辑运算符两边非0位真,0为假
a = 4'ha
b = 4'd0
c = a && b   // c的值为0

2.7 关系运算符

a < b
a > b
a <= b
a >= b

2.8 移位运算符

  • 移位运算符是二元运算符,<<和>>,将运算符左边的数左移或者是右移指定的位数,用0来补充空闲位
b <= a << 1; // a的每一位都左移一位,结果赋值给b
b <= a >> 1; // a的没一位都右移一位,结果赋值给b
  • 在应用移位运算符的时候一定要注意他的特性:就是空闲位使用0来补充,也就是说,一个二进制数不管原来的数值是多少,只要一直移位,最终都会变为0
4'b1000 >> 3;  // 4'b0001
4'b1000 >> 4;  // 4'b0000
  • 移位运算符可以代替乘法和除法,左移一位可以看成是乘2,右移一位可以看成是除2,但是要注意位拓展

2.9 拼接运算符

  • {,} -- 位拼接运算符
a = 8'b1011_1111;
b = 3'b011;
c = 5'b11011;
{a,b,c} ; // 拼接成16bit

2.10 三元运算符

[表达式1]?表达式2:表达式3
a = 6;
b = 7;
c = (a>b)?a:b;

2.11 优先级

  • 一元运算符>二元运算符>三元运算符
  • != > 按位运算 > && > || > 条件运算
  • 归约运算符 > 算术运算符 > 移位运算符 > 关系运算符 > == 和 !=
  • 使用()提升优先级

2.12 if-else语句

if(表达式)   // 这种写法在always语句块产生组合逻辑的时候中会产生latch,不推荐使用
  语句块;

if(表达式)
  语句块1;
else if(表达式2)
  语句块2;
....
else
  语句;    // 这种是最常用的写法

2.12 case语句

switch(表达式)
  case value1 : 语句1;
  case value2 : 语句2;
  ....
  default: 语句;

2.13 系统函数

`timescale 1ns/1ns  // 时间尺度预编译指令 时间单位/时间精度
时间单位和时间精度有由1,10及100以及s,ms,ns,us,ps,fs组成
时间单位:定义仿真过程中所有与时间相关量的单位
仿真中使用#数字表示延迟相应的时间单位的时间,例如#10表示延时10个时间单位,即10ns

时间精度:决定时间相关量的精度及仿真显示的最小单位
`timescale 1ns/10ps  // 精度0.01, #10.11 表示延迟10110ps

`timescale 100ps/1ns // 错误,时间单位不能比时间精度小
// 主要的函数,在支持verilog语法的编译器中都会显示为高亮的关键字
$display    //打印信息,自动换行
$write      //打印信息
$strobe     //打印信息,自动换行,最后执行
$monitor    //检测变量
$stop       //暂停仿真
$finish     //结束仿真
$time       //时间函数
$random     //随机函数
$readmemb   //读取文件的函数

$display()

$display(); //  输出,打印信息
$display("%b+%b = %d",a,b,c);
// %d %D -- 十进制
// %o %O -- 八进制
// %b %B -- 二进制
// %d %D -- 十六进制
// 不指定进制,默认为十进制数
`timescale 1ns/1ns

module tb_test();
  reg [3:0] a;
  reg [3:0] b;
  reg [3:0] c;
  
  // initial只在仿真中使用,是不可综合的
  // 仿真开始,只执行一次
  initial begin
    $display("Hello");
    $display("EmbedFire");
    a = 4'd5;
    b = 4'd6;
    c = a + b;
    #100;
    $display("%b + %b = %d",a,b,c);
    
  end
endmodule

result:
Hello
EmbedFire
010 + 0110 = 11

$write()

  • write() -- 输出打印信息 -- 函数不会自动进行换行
`timescale 1ns/1ns

module tb_test();
  reg [3:0] a;
  reg [3:0] b;
  reg [3:0] c;
  
  // initial只在仿真中使用,是不可综合的
  // 仿真开始,只执行一次
  initial begin
    $write("Hello");
    $write("EmbedFire");
    a = 4'd5;
    b = 4'd6;
    c = a + b;
    #100;
    $write("%b + %b = %d",a,b,c);
    
  end
endmodule

$strobe()

  • 输出打印函数 -- 在最后进行执行
`timescale 1ns/1ns

module tb_test();
  reg [3:0] a;
  reg [3:0] b;
  reg [3:0] c;
  
  // initial只在仿真中使用,是不可综合的
  // 仿真开始,只执行一次
  initial begin
    $strobe("strobe:Hello"); // 写在最前面,但是执行在最后
    a = 4'd5;
    $display("EmbedFire");
    $display("display:%b + %b = %d",a,b,c);  // 在执行这条语句的时候b,c都没有进行赋值
                                             // 所以b,c未知的x
    b = 4'd6;
    c = a + b;
    #100;
  
  end
endmodule

$monitor()

  • 检测变量,只要打印的变量发生了变化,就会执行一次
`timescale 1ns/1ns

module tb_test();

	reg [3:0] a;
	reg [3:0] b;
	reg [3:0] c;

	initial begin
		a = 4'd5;
		#100;
		b = 4'd6;
		#100;
		c = a + b;
	end

	initial begin
		$monitor("%b + %b = %d",a,b,c);
	end
endmodule

$stop

  • 暂停执行仿真
`timescale 1ns/1ns

module tb_test();
  initial begin
    $display("hello");
    $display("EmbedFire");
    #100;
    $display("Stop Simulation");
    $stop;
    #100;
    $display("Finish Simulation");
    $finish; // 结束仿真
  end
endmodule

$time

`timescale 1ns/1ns

module tb_test();
  reg [3:0] a;
  always #10 a = $random;  
  initial $monitor("a = %d @time %d",a,$time);
endmodule

$readmemb 和 $readmemh

  • $readmemb -- 用于读取二进制文件函数
  • $readmemh -- 用于读取十六进制文件函数
$readmemb("数据文件名",存储器名);
$readmemh("数据文件名",存储器名);
`timescale 1ns/1ns

module tb_test();

  integer i;
  reg [7:0] a [20:0]; // a 为宽度为8bit,深度为21bit的存储器
  
  initial begin
    $readmemb("EmbedFire.txt",a);
    for(i = 0;i<=20;i=i+1) begin
      #10;
      $write("%s",a[i]);  // Welcome to EmbedFire! 
    end
  end
endmodule

读取的文件

本文转载于网络 如有侵权请联系删除

相关文章

  • Redis的Python客户端实例

    参照官网,安装命令sudopipinstallredis或者sudoeasy_installredis亦或源码包执行sudopythonsetup.pyinstall实例>>>importredis >>>r=redis.Redis(host="172.16.64.175",port=6379,db=0) >>>r.keys() ['foo','news:1000:tags','c','a','mylist','mycounter','mykey','b'] >>>r.set('name','yang') True >>>r['sex']='man' >>>r.get('sex') 'man&#

  • MySQL冷备份恢复过程

    备份首先,进入数据库并找出数据文件存放目录:mysql>showvariableslike'\%dir\%';+-----------------------------------------+----------------------------+|Variable_name|Value|+-----------------------------------------+----------------------------+|basedir|/usr||binlog_direct_non_transactional_updates|OFF||character_sets_dir|/usr/share/mysql/charsets/||datadir|/var/lib/mysql/||innodb_data_home_dir|||innodb_log_group_home_dir|./||innodb_max_dirty_pages_pct|75||lc_messages_dir|/usr/share/mysql/||plugin_dir|/usr/

  • 一文带你了解某搜索网站的优化

    该网站的网址我们很熟悉:https://www.baidu.com,打开网站界面其实很简洁,一个搜索框,一个按钮,看似简单的背后其实不简单,因为这样的网站,往往的访问量,并发量奇高,这时候一个看似简单的资源请求,可能就是服务器集群一份压力,而这时候的性能优化就极其重要。 打开chrome浏览器的开发者工具,选择Performance性能面板,可以看到这样如下图1的界面,有一个页面重载的按钮。图1性能分析面板接下来点击一下这个按钮,稍等一会,会出来整个页面重载后的性能分析报告。如图2所示,包括各个阶段与流程所需的时间,在整体时间轴上的占比等等,使你对整个网页的各个位置的信息都了然于胸,哪部分所花时间长,就改善哪部分。图2页面重载调节上方的拖条,可以将不重要部分去除,如图3所示。图3显示各个资源的详细信息这时观察一下,可以看到,除了此网站域名之外,还有不少图片是来自于一个ss1.bdstatic.com的静态资源域,如图4所示。图4分多域名取资源这就是要说的第一个,分多域名取资源,就犹如前面章节一直反复强调的一样,浏览器本身是有并发请求限制数的,就比如并发请求限制,但这个限制的前提,就是同

  • 数据科学的「小地方」安克雷奇迎来KDD2019开幕

    好戏开场!作者|杨晓凡编辑|Pita 8月4日,数据科学与机器学习盛会KDD2019在美国阿拉斯加州市安克雷奇市召开。这里人烟稀少、空气很好,而且即便现在正处于夏天也并不炎热,气温只有20度左右。会议时间一共5天,其中4日为Tutorial日、5日为Workshop日,6日至8日为大会正会(包含另一些Tutorial,具体见下文)。KDD2019开幕致辞5日下午,大会开幕式在Dena'ina会议中心三楼大会议厅举行。市长致辞首先登场致辞的安克雷奇市市长EthanBerkowitz表示非常欢迎KDD2019在这里举行,同时他也说道,大会有超过三千名参会者,这个数字已经超过了安克雷奇本地居民数量的1%!(根据维基百科上的数据,2018年时这里的居民人口只有不到30万人)这个比例也再次印证了参会者们对城市服务带来的巨大压力,以至于酒店房间都会超售,不少参会者早早预定了酒店,然而办理入住手续的时候才被告知没有房间可供入住;其中有一部分人被安排住到了阿拉斯加大学安克雷奇分校(UAA)的宿舍中。不过,AI科技评论也想从数据科学大家庭的角度补充一两句。安克雷奇并不只是阿拉斯加州随便的一个城

  • P图美颜1秒识破,Adobe伯克利联手打造“反PS”神器

    虚假图片和视频泛滥成灾,连PS的东家Adobe都坐不住了,该公司和UC伯克利联合打造一款“反PS”神器,专门识别被修改过的面部图像,识别准确率达99%,你的美照P没P过,P前什么样,它一眼就看出来!虚假视频和图片的泛滥传播已经让整个世界越来越焦虑,连PS的老东家Adobe都坐不住了!近日,Adobe在博客上宣布,公司与加州大学伯克利分校的科学家合作取得了新的研究成果,利用机器学习技术,可以检测出面部图像是不是被人为修改过的。 这项研究由Adobe研究人员RichardZhang、OliverWang以及加州大学伯克利分校合作者ShengyuWang,AndrewOwens博士和AlexeiA.Efros教授共同完成。该工具使用了由DARPAMediFor计划赞助的PhotoshopFaceAwareLiquify功能。虽然目前仍处于早期阶段,但Adobe和加州大学伯克利分校之间的这类合作,是迈向图像取证全面推进的重要一步。这项新研究旨在更好地检测图像、视频、音频和文档的编辑修改。过去Adobe的研究主要集中在基于拼接,克隆和删除等修改手段的图像处理和检测。此次打造的这款工具专门检测由P

  • Committee和Virtual Project Team的关系

    VirtualProjectTeam是基于activity或者说projectsetup的。作为management和developer之间的沟通桥梁,做好roll-in和roll-outRoll-in:搜集developer的idea,input和feedback,整理后作为和management讨论和review的input; Roll-out:将与management的讨论结果,包括一些teamdecision,rollout给全体developer 从developer处搜集roundtable待执行的activityproposal,同management讨论,review,得到approval 针对approved的roundtableactivity,setup对应的VirtualProjectteam 指定详细的activityexecutionplan并负责按照plan去执行 当VirtualProjectteam执行activity遇到困难时,帮助Virtualteam确保activity顺利执行在activity执行遇到困难时,及时反馈给committee,找出原

  • 224秒训练ImageNet!这次创纪录的是索尼大法

    【新智元导读】深度神经网络训练速度越来越快已经不是新鲜事,但是,将ImageNet训练时间降低到200秒级别仍然让人震撼!近日,索尼发布新的方法,在ImageNet数据集上,使用多达2176个GPU,在224秒内成功训练了ResNet-50,刷新了纪录。随着用于深度学习的数据集和深度神经网络模型的规模增大,训练模型所需的时间也在增加具有数据并行性的大规模分布式深度学习可以有效缩短训练时间。然而,由于大型mini-batch训练的不稳定性和梯度同步的开销,将分布式深度学习扩展到大规模的GPU集群级别很有挑战性。日本索尼公司的HiroakiMikami等人近日提出一种新的大规模分布式训练方法,通过控制batchsize解决了大型mini-batch训练的不稳定性,用2D-Torusall-reduce解决了梯度同步的开销。具体而言,2D-Torusall-reduce将GPU排列在一个逻辑2D网格中,并以不同的方向执行一系列操作。这两种技术都是基于索尼的神经网络库NNL(NeuralNetworkLibraries)实现的。最终,索尼的研究人员在224秒内(使用多达2176个GPU)成功训

  • CSS应用给网页元素的几种方式总结

    一、内联式样式表  直接在HTML标签中使用style进行定义样式。如:<pstyle="color:red;">这里是红色文字</p>.二、嵌入式样式表  使用<style></style>标签嵌入到HTML文件中的<head></head>标签内。("<!---->"用来对样式进行注释)三、外部链接式样式表  将样式写在一个单独的.css文件中,然后再在HTML页面的<head></head>标签内使用<link>标记进行调用它,这样实现内容和样式相分离。如:<linkhref=”main.css”rel=”stylesheet”type=”text/css”/>;四、导入式样式表  导入式样式表与链接式样式表功能基本相同,只是语法和动作上略有不同,同样也将导入式样式代码写在<head></head>标签内。  语法:<styletype=”text/css”>@importu

  • thinkphp在IIS环境下配置伪静态,web.config配置

    <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="OrgPage" stopProcessing="true"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll"> <add input="{HTTP_HOST}" pattern="^(.*)$" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="tru

  • knockout源码分析之执行过程

    一、执行流程二、主要类分析2.1.在applyBindings中,创建bindingContext,然后执行applyBindingsToNodeAndDescendantsInternal方法 2.2.在applyBindinsToNodeAndDescendantsInteranl方法,主要完成当前Node的绑定,以及子Node的绑定 functionapplyBindingsToNodeAndDescendantsInternal(bindingContext,nodeVerified,bindingContextMayDifferFromDomParentElement){ varshouldBindDescendants=true; //Perfoptimisation:Applybindingsonlyif... //(1)Weneedtostorethebindingcontextonthisnode(becauseitmaydifferfromtheDOMparentnode'sbindingcontext) //Notethatwecan'tst

  • ceph创建pool时pg_num的配置

    pg_num#用此命令创建存储池时:cephosdpoolcreate{pool-name}pg_num复制确定pg_num取值是强制性的,因为不能自动计算。常用的较为通用的取值:少于5个osd,pg_num设置为128osd数量在5到10个时,pg_num设置为512osd数量在10到50个时,pg_num=4096osd数量大于50是,需要理解ceph的权衡算法,自己计算pg_num取值自行计算pg_num取值时可使用ceph配套的pg_num取值工具pgcalc(https://old.ceph.com/pgcalc/)参考#https://www.cnblogs.com/varden/p/13921172.html

  • 16_自定义指令

    1.自定义指令 <!DOCTYPEhtml> <html> <head> <metacharset="UTF-8"/> <title>自定义指令</title> <scripttype="text/javascript"src="../js/vue.js"></script> </head> <body> <!-- 需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。 需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。 自定义指令总结: 一、定义语法: (1).局部指令: newVue({newVue({ directives:{指令名:配置对象}或directives{指令名:回调函数} })}) (2).全局指令: Vue.directive(指令名,配置对象)或Vue.directive(指令名,回调函数) 二、配置对象中常用的3个回调: (1).bind:指令与元

  • intelliJ idea代码折叠

    在intelliJidea中不仅可以对类、方法等结构的代码进行折叠(ctrl+-)还可以自定义折叠代码。intelliJ支持两种风格的自定义代码折叠,如下: visualstudiostyle //regionDescription Yourcodegoeshere... //endregion复制 netbeansstyle //<editor-folddesc="Description"> Yourcodegoeshere... //</editor-fold>复制 你可以直接手写,也可以使用快捷键实现对一段代码的自定义折叠,快捷键为:ctrl+alt+t     一年零五个月没更新博客了,占个位^-^。 我最擅长从零开始创造世界,所以从来不怕失败,它最多也就让我一无所有。

  • 用cmd导入oracle的.dmp文件和修改oracle管理员密码

    1,首先创建用户  语法[创建用户]:createuser用户名identifiedby 口令[即密码]; 例子:createuserzhengxinidentifiedbyzhengxin;  2.给用户赋予dba权限 grantdbatozhengxin 3.打开cmd命令行 语法:mp用户名/密码@主机IP:端口号/实例file=dmp文件所在的路径full=y. 输入:impzhengxin/zhengxin@localhost:1521/orclfile="e:\个人业务数据.dmp"full=y;  例子:C:\Users\Administrator>impzhengxin/zhengxin@localhost:1521/orclfile="e:\个人业务数据.dmp"full=y; 这样数据就导入成功了。   如果oracle密码忘记了,打开cmd 直接输入:>sqlplus/nolog  >conn/assysdba; >alterusersysidentifiedbysys;

  • 放生的好处的真实例子,例举放生故事

    放生是一种很好的行善的作为,不管你放生了什么,总是可以得到应有的回报。可能很多人都还没有放生的经验,也很少听说过放生的例子。那么本期佛教故事,就带你一起来看看以下这些放生的真实例子,一起好好学习。   一、发愿放生行善,第二天瘫病好了  直隶有个姓辛的,患了瘫痪症,他有位朋友叫徐浩的,对他说放生的好处,辛说我病了一年多了,不能起床,如果能好,我发誓一生劝人行善,做宏扬感化人的工作,爱护所有的生灵。发愿完了,第二天,忽然由床上一跳,就起来了,行动象往常一样。   二、放生米虫,重病痊愈,喜得贵子  镇江的周千秋,在北京做官的时候,每月官府给他俸禄的米,有很多米已生虫。于是,他命令家中的仆人用簸箕上下扇动,把虫子扬出去。虫子落在地上,招来很多蚂蚁啃它,鸡又来吃它。他的妻子沈氏很怜悯这些小米虫,叫仆人先把芦席铺在地上,然后用簸箕再扇动。簸扬完了,把虫子从席子上收聚到一起,放到陶罐里,而且用扬出的米糠饲养它们。到了秋天,这些虫子都变成蛹,由蛹生翅飞去了。   不多时,沈氏患了糖尿病,已经到了很严重的程度。周千秋便用她救养米虫事,来宽慰她说:“难道救活了百万条生命的人,还会短命?”过了不多日,

  • leetCode-Degree of an Array

    Description: Givenanon-emptyarrayofnon-negativeintegersnums,thedegreeof thisarrayisdefinedasthemaximumfrequencyofanyoneofits elements. Yourtaskistofindthesmallestpossiblelengthofa(contiguous)subarrayofnums,thathasthesamedegreeasnums. Example1: Input:[1,2,2,3,1] Output:2 Explanation: Theinputarrayhasadegreeof2becausebothelements1and2appeartwice. Ofthesubarraysthathavethesamedegree: [1,2,2,3,1],[1,2,2,3],[2,2,3,1],[1,2,2],[2,2,3],[2,2] Theshortestlengthis2.Soreturn2.复制 Example2: Input:[1,2,2,3,

  • cocos2d-x与UIKit混合编程实现半透明效果

    关键词  cocos2d-x,UIKit,transparent 问题 cocos2d-x使用一个专门的OpenGLView进行渲染,它的渲染和UIKit是分开进行的,因此我们使用时一般是把cocos2d-x全屏显示,比如Ray的这篇教程(http://www.raywenderlich.com/4817/how-to-integrate-cocos2d-and-uikit)(cocos2d-x和cocos2d在本篇文章中没有本质区别) 如果我们把cocos2d作为一个子view插进来时,cocos2d的scene如果不加任何东西,就会是黑色的一个矩形,无法做成透明效果.即使把OpenGLView的backgroundcolor设成clearColor也没用.cocos2d到底能不能变得透明? 通过bing艰难的找到这篇自问自答, http://stackoverflow.com/questions/12846744/cocos2d-opengl-es-becoming-transparent-over-uiview,虽然只有一个赞,但确实是网上唯一一个能够解决该问

  • 决策树---------2020.9.20

    决策树 参考资料:AndrewW.MooreProfessorSchoolofComputerScienceCarnegieMellonUniversity DecisionTrees 决策树 一、机器学习数据集 二、分类/回归 三、信息熵 四、列联表 五、信息增溢 六、生成决策树 七、训练集误差与测试集误差 八、过拟合 九、避免过拟合 十、数值型输入 十一、另一种分类方法 十二、总结 一、机器学习数据集       这组记录的集合称为一个“数据集”,其中每条记录是关于一个事件或对象的描述,称为一个“示例”或“样本”,反映事件或对象在某方面的表现或性质的事项,属性的取值称为属性值,属性展开的空间称为“属性空间”。 二、分类/回归 三、信息熵 ex1. P(A)=1/4 P(B)=1/4 P(C)=1/4 P(D)=1/4 ex2. P(A)=1/2 P(B)=1/4 P(C)=1/8 P(D)=1/8 如何编码? 对于ex1,我们可以编码A=00,B=01,C=10,D=11,显然我们需要用到两个bit来记录事件;对于ex2,我们可以编码A

  • 第六天:pandas

    (略)

  • 面向对象三要素

    面向对象三要素 Postedon 2009-12-1109:06 我不是高手 阅读(3595)评论(1) 编辑 收藏 面向对象三要素是:封装继承多态 封装  封装就是事物抽象为类,把对外接口暴露,将实现和内部数据隐藏。 继承 面向对象编程(OOP)语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”。 被继承的类称为“基类”、“父类”或“超类”。 继承的过程,就是从一般到特殊的过程。 要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。 在某些OOP语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。   继承概念的实现方式有三类:实现继承、接口继承和可视继承。 Ø         实现继承是

  • dependencies 和 devDependencies

    npminstallnode_module–save自动更新dependencies字段值 npminstallnode_module–save-dev自动更新devDependencies字段值 看下面的一个package.json文件 { "private":true, "version":"0.0.1", "description":"YOURDESCRIPTION-Generatedbygenerator-react-webpack", "main":"", "scripts":{ "clean":"rimrafdist/*", "copy":"copyfiles-f./src/index.html./src/favicon.ico./dist", "dist":"npmruncopy&webpack--env=dist", }, "repository":"", "keywords":[], "author":"Yournamehere", "devDependencies":{ "babel-core":"^6.0.0", "babel-eslint":"^6.0

相关推荐

推荐阅读