数字系统设计与verilog_HDL_王金明_第四版__EDA期末知识点复习(宁波工程学院电科版)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、采用硬件描述语言(HDL)进行电路设计的优势。

1)更适合用于描述规模大、功能复杂的数字系统

2)语言标准化、便于设计的复用、交流、保存和修改

3)设计与工艺的无关性,宽范围的描述能力,便于组织大规模、模块化的设计

2、Verilog模块的结构

模块声明:包括模块名字、模块输入、输出端口列表,结束关键字为endmodule

端口定义:格式为:input: 端口名1,端口名2…端口名n;

output: 端口名1,端口名2…端口名n;

inout: 端口名1,端口名2…端口名n;

3、标识符是用户在编程时给verilog对象起的名字,模块、端口和实例的名字都是标识符。标识符可以是任意一组字母、数字以及符号“$”和“_”的组合,但标识符的第一个字符必须是字母(a-z,A-Z)或者是下划线“_”,标识符最长可包含1023个字符,此外,标识符区分大小写。

4、整数写法:+/-

1、在较长的数之间可用下划线分开

2、当数字不说明位宽时,默认值为32位

3、X或(z)在二进制中代表1位x(或z),在八进制中代表3位,在16进制中代表4位

4、如果没有定义一个整数的位宽,其宽度为相应值中定义的位数。

5、如果定义的位宽比实际的位数长,通常在左边填0补位,但如果最左边一位为x或z,就相应的用x或z左边补位。

6、“?”是高阻态z的另一种表示符号,在数字的表示中,字符“?”和z是完全等价的,可相互代替。

7、整数可以带符号,并且正负号应写在最左边,负数通常表示为二进制补码的形式。

8、当位宽与进制缺省时表示的是10进制数

9、在位宽和‘之间,以及进制和数值之间允许出现空格,但’和进制之间以及数值之间是不能出现空格的。

要求掌握整数正确的书写方式。

5、向量:宽度大于1位的变量;

标量:宽度为1位的变量。

定义2个8位reg型矢量:reg [7:0] ra, rb;

6、运算符

(1)注意:逻辑运算符,例如逻辑与&&、逻辑或||、逻辑非!,运算结果是1位的。如果操作数不止1位的话,则应将操作数作为一个整体来对待,即如果操作数全是0,则相当于逻辑0,但只要某一位是1,则操作数就应该整体看作逻辑1。

例如:若A = 4’b0000, B = 4’b0101,则有:

A &&

B = 0;

(2)位拼接运算符:{ }将两个或多个信号的某些位拼接起来

7、initial语句和always语句的区别:initial语句常用于仿真中的初始化,initial过程块中的语句只执行一次,不带触发条件;always块内的语句则是不断重复执行的,Always过程语句是可综合的,带有触发条件。

8、posedge:上升negedge:下降

弄清楚同步和异步的概念。

例如:如果Nreset和Nset是异步,时钟clock上升沿触发。

always @(posedge clk or posedge rst_n )

if (! rst_n ) Q<=0;

else if(Nset) Q<=1;

else Q<=D;

9、阻塞赋值与非阻塞赋值的区别:非阻塞赋值在整个过程块结束时才完成赋值操作;阻塞赋值在该语句结束时就立即完成赋值操作。在always过程块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为赋值语句是并发执行的.

10、条件语句,条件语句也称分支语句。

11、顺序执行:阻塞赋值语句;

并发执行:非阻塞赋值语句。

12、用行为语句设计一个8位计数器,每次在时钟的上升沿,计数器加1,当计数器逸出时,自动从零开始重新计数。计数器有同步复位端。

module count(count,reset,clk);

input clk,reset;

output clk,reset;

output [7:0] count;

reg count;

always @(posedge clk)

if(reset==1)

begin

count=8'b0;

end

else if (count=8'b11111111)

begin

count=9'b0;

end

else if

begin

count=count+1;

end

end module

13奇偶校验位产生器的Verilog HDL描述:

module parity(evrn_bit,odd_bit,a);

input[7:0] a; output even_bit,odd_bit;

assign even_bit=^a; //生成偶校验位

assign odd_bit=~even_bit; //生成奇校验位

endmodule;

14、课本197页:8.2 有限状态机的Verilog描述

参考例8.3,例8.7,学会用有限状态机设计序列检测器。

module fsm_seq1111(x,z,clk,reset);

input x,clk,reset;

output reg z;

reg[4:0] state;

parameter S0=’d0,S1=’d1,S2=’d2,S3=’d3,S4=’d4; always @(posedge clk)

begin if(reset) begin state<=S0;z<=0; end

else casex(state)

S0: begin if(x==0) begin state<=S0;z<=0;end else begin state<=S1;z<=0;end end

S1: begin if(x==0) begin state<=S0;z<=0;end else begin state<=S2;z<=0;end end

S2: begin if(x==0) begin state<=S0;z<=0;end else begin state<=S3;z<=0;end end

S3: begin if(x==0) begin state<=S0;z<=0;end else begin state<=S4;z<=1;end end

S4: begin if(x==0) begin state<=S0;z<=0;end else begin state<=S4;z<=1;end end

default: state<=S0;

endcase

end

endmodule

15、状态机设计流水灯:

module led_water(clk50M,rst,led);

input clk50M;

output[7:0] led;

input rst;

wire clk_5hz;

reg[7:0] led_r;

reg[3:0] state;

reg[23:0] count;

parameter s0='d0,s1='d1,s2='d2,s3='d3,

s4='d4,s5='d5,s6='d6,s7='d7,

s8='d8,s9='d9,s10='d10,s11='d11,

s12='d12,s13='d13,s14='d14,s15='d15;

always @(posedge clk50M)

begin

if(count==10000000)

begin count<=1'b0;end

else

count<=count+1'b1;

end

assign clk_5hz=count[23];

assign led=led_r;

always @(posedge clk_5hz)

begin

if(!rst) state=s0;

相关文档
最新文档