数字系统设计与veriloghdl课后答案

发布时间 : 星期四 文章数字系统设计与veriloghdl课后答案更新完毕开始阅读

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

2、verilog模块的结构

模块声明:包括模块名字、模块输入、输出端口列表,结束关键字为endmodule 端口定义:格式为:input: 端口名1,端口名2?端口名n;

output: 端口名1,端口名2?端口名n; inout: 端口名1,端口名2?端口名n;

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

4、整数写法:+/-size位宽’base进制value数字 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=8b0; end

else if (count=8b11111111)

begin

count=9b0; 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 elsecasex(state)

s0: begin if(x==0) begin state=s0;z=0;end elsebegin state=s1;z=0;end end

s1: begin if(x==0) begin state=s0;z=0;end elsebegin state=s2;z=0;end end

s2: begin if(x==0) begin state=s0;z=0;end elsebegin state=s3;z=0;end end

s3: begin if(x==0) begin state=s0;z=0;end elsebegin state=s4;z=1;end end

s4: begin if(x==0) begin state=s0;z=0;end elsebegin 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=1b0;end else

count=count+1b1; end

assign clk_5hz=count[23]; assign led=led_r;

always @(posedge clk_5hz) begin

if(!rst) state=s0; else case(state)

s0: begin led_r=8b01111111; state=s1;end s1: begin led_r=8b10111111; state=s2;end s2: begin led_r=8b11011111; state=s3;end s3: begin led_r=8b11101111; state=s4;end s4: begin led_r=8b11110111; state=s5;end s5: begin led_r=8b11111011; state=s6;end s6: begin led_r=8b11111101; state=s7;end s7: begin led_r=8b11111110; state=s8;end s8: begin led_r=8b11111100; state=s9;end s9: begin led_r=8b11111000; state=s10;end s10: begin led_r=8b11110000; state=s11;end s11: begin led_r=8b11100000; state=s12;end s12: begin led_r=8b11000000; state=s13;end s13: begin led_r=8b10000000; state=s14;end s14: begin led_r=8b00000000; state=s15;end

联系合同范文客服:xxxxx#qq.com(#替换为@)