笔记

非阻塞( non-blocking) 赋值语句:
    always @(posedge clk)
        begin
              b <= a ;
              c <= b;
        end
注解:b、c的值在下一个时钟上升延时变化;
阻塞( blocking) 赋值语句:
    always @(posedge clk)
        begin
              b = a ;
              c = b;
        end
阻塞(non-blocking) 赋值语句 ( b<= a)
    - 块内的 赋值语句同时赋值;
    - b 的值被赋成新值 a 的操作 , 是与块内其他 赋值语句同时完成的;
    - 建议在可综合风格的模块中使用非 阻塞 赋值。
阻塞( blocking) 赋值语句 ( b = a)
    - 完成该赋值语句后才能做下一句的操作;
    - b 的值立刻被赋成新值 a;
    - 硬件没有对应的电路,因而综合结果未知
 
信号类型确定方法总结如下:
•信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,其它的信号为内部信号。
•对于端口信号,输入端口只能是wire 类型。输出端口可以是wire 类型,也可以是 register 类型。若输出端口在过程块中赋值则为 register 类型;若在过程块外赋值 ( 包括实例化语句),则为wire 类型。
•内部信号类型与输出端口相同,可以是 wire register 类型。判断方法也与输出端口相同。若在过程块中赋值,则为 register 类型;若在过程块外赋值,则为 net 类型。
•若信号既需要在过程块中赋值,又需要在过程块外赋值。这种情况是有可能出现的,如决断信号。这时需要一个中间信号转换。
下面所列是常出的错误及相应的错误信息 (error message)
•用过程语句给一个 net 类型的或忘记声明类型的信号赋值。
           信息: illegal …… assignment.
•将实例的输出连接到声明为 register 类型的信号上。
           信息: <name> has illegal output port specification.
•将模块的输入信号声明为 register 类型。
           信息: incompatible declaration, <signal name> ……
 
wire类型是最常用的类型,只有连接功能。
wire和tri类型有相同的功能。用户可根据需要将线网定义为wire或tri以提高可读性。例如,可以用tri类型表示一个net有多个驱动源。或者将一个net声明为tri以指示这个net可以是高阻态Z(hign-impedance)。可推广至wand和triand、wor和trior
wand、wor有线逻辑功能;与wire的区别见下页的表。
trireg类型很象wire类型,但trireg类型在没有驱动时保持以前的值。这个值的强度随时间减弱。
修改net缺省类型的编译指导:
 
避免latch
if-else一顶要配套使用,否则else对应的条件在生成电路中用一个锁存器保存。
always语句的电平敏感信号要完整,否则漏掉的那个电平也会生成锁存器。
同样道理,case不能缺少default;
 
Verilog 语法支持多层次多模块设计:
` include 宏指令可以在一个模块中包含多个模 块;
在一个模块中可以用实例调用别的模块中定义的 电路结构,构成多层次模块;
在一个模块中可以用多个任务和函数来表 达复杂 的状态机和结构;
一个设计项目往往由一个顶层测试模块和多个可综合模块和若干个外围接口模块构成。
 
Verilog测试模块结构:
`timescale 1ns/1ns
`include 可综合模块 .v    . . . .
`include 外围电路 .v       . . . .
`include 激励信号 .v       . . . .
module top;
wire   连线定义 . . . .
Reg   初试化块中寄存器定义 . . . .
initial begin  
             定义波形记录、输入数据文件、记录输出文件
             监视重要信号、记录重要时刻、设置仿真时间等。               
            end
信号模块    xh1( .clock( clk), .reset(rst), .ack(ackn) . . . . .);  
    .   .   .   .   .
可综合模块 mysj1(. clock(clk), reset(rst),.ack(ackn) . . .);
    .   .   .   .   .
外围模块       ram1(.read(rd), .write(wrt), .data(databus) . . .);
    .   .   .   .   .
endmodule     
 
                           
常用的综合工具:
- Synplify
- Exemplar
- Synopsys Express
- Synopsys Designer
常用的仿真工具:
- Verilog -XL
  
   - NC -Verilog
   - ModelSim
   - VeriBest
   - ViewLogic

你可能感兴趣的:(职场,笔记,休闲)