Verilog

Verilog中模组(module)的概念解析

模组(module)的概念

--------------------------------------------------------------------------------
 
Verilog中的基本单元是模组(module)。
模组代表一些可以用硬体实践的逻辑实体。 例如,一个模组可以是一个逻辑闸、一个三十二位元计数器、一个记忆体子系统、一个机算机系统或是一个用网路相连的多部电脑。
模组中与外界连接端(port)可以是一个位元或数个位元。连接端可以宣告为输入端、输出端或输出入端。

以下介绍Verilog语法,用三种不同层级(Level)来表示模组的方式。

 

下面以一个自定的 AND2 模组来说明。
它有三个单一位元称为 in1、in2、及 out 的连接端。其中 in1及 in2 为输入,而 out 为输出。其实这个 AND2 模组能做的事和 and 闸是一样的。

Verilog学习笔记以及一些设计案例分析

一般认为
Verilog HDL在系统级抽象方面比VHDL略差一些,而在门级开关电路描述方面比VHDL要强的多

写了第一个verilog程序,是一个加法器内容如下
module adder(count,sum,a,b,cin);
input[2:0] a,b;
input cin;
output count;
output [2:0] sum;
assign{count,sum}=a+b+cin;
endmodule

开始编译出现了几次错误,后来发现给实体的命名和程序中实体要一致而且大小写要一样,整个程序是嵌套再module和endmodule当中的

而其中的注释和C/C++类似,用//和/*…*/来标明

module compare(equal,a,b);
output equal;
input [1:0] a,b;
assign equal=(a==b)?1:0;//和C语言中的相同
endmodule


verilog的基本设计单元是“模块(BLOCK)”。一个模块由两个部分组成,一部分描述端口,一部分描述逻辑功能,即定义输入是如何影响输出的。

verilog学习心得

Verilog的两个误区:
使用Reg类 型还是Net类型:
Reg类 型只在过程块中被赋值;而Net类型则在过 程块外面被赋值或者驱动.

阻塞赋值和非阻塞赋值:
Verilog中竞争发生的条件:两个或多个语句在执行顺序不同时导致不同的结果,则存在竞争.
Nonblocking不 是一个类型;
Blocking赋 值是一个单步过程,计算RHS,并更形LHS是不可中断的.
七 条准则:
1.时序逻辑和锁存器,使 用非阻塞赋值
2.always块中的组合逻辑,使用阻塞赋值
3.同一always块,时序组合混合逻辑使用非阻塞赋值
4.通常情况下,在同一always块中不要混合使用阻塞与非阻塞赋值
5.不 要在多个always块中对同一变量进行赋值
6.使用$strobe显示非阻塞赋值得信号
7.不要用#0的过程赋值
Verilog中的分层事件队列:
活动事件:阻塞赋值;计算非阻塞赋值的RHS;连续赋值;$display命令;计算输入并改变原语的输出.这些事件可能按照任意次序 调度.
非活动事件:#0的阻 塞赋值
非阻塞事件:更新非阻 塞赋值的LHS
监视事件:$monitor命 令;$strobe命令
经验:
在always块中使用非阻塞赋值来 产生时序逻辑和锁存器
在always块 中使用阻塞赋值来产生组合逻辑

分享一个FPGA (verilog) 小键盘 扫描程序

电脑键盘的小键盘 主要有 0到9 及加、减、乘、除 NUMLOCK del ENTER 组成

其构成为6*4键盘:verilog程序如下:

module key(clk,cpld_e,led,key_hang,key_lie);
input clk;
input [5:0] key_hang;//行输入 6行
output [3:0] key_lie;//列输出 4列
output [1:0] cpld_e;
output [15:0] led;

reg [3:0] key_lie;
reg [15:0] led;//8位8段共阴极数码管

assign cpld_e=2'b01;

reg [6:0] cnt;
reg clk_out;
reg [2:0] state = 3'b000;
reg [9:0] key_value;
reg key_flag;

always @(posedge clk) begin//分频 100M输入 分频后约为10MS
   if(cnt==7'b1000000) begin
    clk_out<=~clk_out;
&

verilog HDL语言的一些概念---转载21ic赛灵思FPGA世界

一:基本
Verilog中的变量有线网类型和寄存器类型。线网型变量综合成wire,而寄存器可能综合成WIRE,锁存器和触发器。

二:verilog语句结构到门级的映射
1、连续性赋值:assign
连续性赋值语句逻辑结构上就是将等式右边的驱动左边的结点。因些连续性赋值的目标结点总是综合成由组合逻辑驱动的结点。Assign语句中的延时综合时都将忽视。

分享:FIFO 同步、异步以及Verilog代码实现

FIFO 很重要,之前参加的各类电子公司的逻辑设计的笔试几乎都会考到。

FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。

赛灵思公司提供的Verilog(FPGA/CPLD)设计小技巧

这是一个在设计中常犯的错误列表这些错误常使得你的设计不可靠或速度较慢为了提高你的设计性能和提高速度的可靠性你必须确定你的设计通过所有的这些检查

硬件描述语言Verilog基础知识

Verilog语言是一种在广泛的抽象层次设定说明数字系统的硬件描述语言。这种语言支持早期的行为级抽象设计概念,以及后期结构级抽象设计的实现。它包括层次式结构,从而允许设计人员控制描述的复杂度。 Verilog最初于1983年至1984年之间的冬季被设计为一种专用的验证/模拟工具, 后来,基于这种语言又开发了其他几种专用分析工具,包括故障模拟器和时序分析器。

最近Verilog也为逻辑综合工具和行为综合工具提供了输入规范。Verilog语言有助于提供这些工具的一致性。现在,这种语言已标准化为IEEE#1364—1995标准,并且广泛用于多种工具。本书介绍Verilog语言,为该语言的初学者和高级用户提供素材。

有时很难将该语言和模拟工具分离开,原因是该语言的动态特性是由模拟器的工作方式确定的。而且,将它和综合工具分离开也是困难的,因为它的语义是由综合工具所允许的输入规范以及所产生的实现来限定的。我们尽可能避开专本书采来介绍了Verilog语言的基础知识。

今天解决了一个很基础的问题

今天解决了一个很基础的问题
在论坛里看到有人提问如下代码报错:
define plus 3'd0
`define minus 3'd1
`define band 3'd2
`define bor 3'd3
`define unegate 3'd4
module alu(opcode,out,a,b);
input[2:0]opcode;
input [7:0]a,b;
output[7:0]out;
reg[7:0]out;
always@(opcode or a or b)
begin
case(opcode)
plus:out=a+b;
minus:out=a-b;
band:out=a&b;
bor:out=a|b;
unegate:out=~a;
default:out=8'hx;
endcase
end
endmodule
显示错误 :Error (10161): Verilog HDL error at alu.v(14): object "plus" is not declared

首先plus 3'd0这样的应该为3'b0,否则和后面的t[2:0]opcode;位数无法对应
语法没有什么问题,但是编译确实提示错误
把`define 改成reg或者 parameter肯定没问题

赛灵思Verilog(FPGA/CPLD)设计小技巧(非常实用!)

以下是一个在设计中常犯的错误列表这些错误常使得你的设计不可靠或速度较慢为了提高你的设计性能和提高速度的可靠性你必须确定你的设计通过所有的这些检查 。