ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Verilog快速入门的练习

2021-12-09 19:33:02  阅读:140  来源: 互联网

标签:语句 入门 代码 练习 电路 Verilog x2 x1


第1关:Verilog描述电路模块

实验目的

熟悉用Verilog HDL描述电路模块的基本代码结构,掌握模块开始和结束的关键字,并会对模块名字进行合法命名。

实验任务

请在右侧代码窗格中补充完整模块关键字以及合法的模块名字标识符。 请在两行星号之间的空行上填写代码,切勿改动其它代码!!


  1. /********** Begin of blank1 *********/
  2. //please write your code here!
  3. /********** End of blank1 ***********/

相关知识

电路模块

数字逻辑电路以模块(module)的形式定义,如下图所示:

,

标识符的命名规则

1.以字母开头 2.可以包含任何字母和数字以及下划线_、美元符号$ 3.区分大小写

测试说明

请在右侧代码窗格中补充完成Verilog代码,点击右下方的评测按钮,平台会对你编写的代码进行测试:


开始你的任务吧,祝你挑战成功!

/********** Begin of blank1 *********/
  //请输入电路模块关键字以及模块名字(合法并具有一定含义的标识符,如cir_name、main等)
module main;
/********** End of blank1 *********/

  initial       //初始化
    begin       //相当于C语言的 {
      $display("hello, welcome to the colorful digital circuits world!");//相当于C语言的printf函数
      $finish;   //操作完成
    end         //相当于C语言的 }

/********** Begin of blank2 *********/
	//请输入模块结束关键字
	endmodule
/********** End of blank2 *********/

 

 第2关:Verilog电路模块的端口描述

 

实验目的

熟悉用Verilog HDL描述电路模块的基本代码结构,掌握端口的概念、输入输出关键字及信号的合法命名。

实验任务

请对照下图电路模块的逻辑符号,在右侧代码窗格中补充完整端口信号列表和输入、输出信号的定义。

,

相关知识

电路模块的端口

一个电路模块有输入和输出信号,它们统称为端口(port),如上图所示。

测试说明

请在右侧代码窗格中补充完成Verilog代码,点击右下方的评测按钮,平台会对你编写的代码进行测试! 以下是测试用例:


  1. VCD info: dumpfile test.vcd opened for output.
  2. time d0 d1 sel f
  3. 0 0 0 0 0
  4. 1 1 0 0 1
  5. 3 1 1 0 1
  6. 7 1 1 1 1
  7. 8 0 1 1 1
  8. 10 0 0 1 0
  9. 14 0 0 0 0
  10. 15 1 0 0 1
  11. 17 1 1 0 1
  12. 21 1 1 1 1
  13. 22 0 1 1 1
  14. 24 0 0 1 0
  15. 28 0 0 0 0
  16. 29 1 0 0 1
  17. 31 1 1 0 1
  18. 35 1 1 1 1
  19. 36 0 1 1 1
  20. 38 0 0 1 0
  21. 42 0 0 0 0
  22. 43 1 0 0 1
  23. 45 1 1 0 1
  24. 49 1 1 1 1

开始你的任务吧,祝你挑战成功!

 

 /********** Begin of blank1 *********/
 module mux2to1(d0,d1,sel,f);//请在括号中补全端口信号列表
 /********** End of blank1 *********/
 	
 /********** Begin of blank2 *********/
   //请给出端口信号的输入输出定义
	 input d0,d1,sel;
   output f;
 /********** End of blank2 *********/
 
    //以下是功能描述
    assign f = sel?d1:d0;
 
endmodule 

第3关:电路功能描述—门级原始结构

 

实验目的

熟悉用Verilog HDL描述电路模块功能的基本方法,掌握门级原始结构的使用方法。

实验任务

用门级原始结构的方式描述2选1多路选择器,在右侧代码窗格中补充完成相应的代码并完成测试。

,

相关知识

逻辑电路的结构化定义

Verilog包含了一系列与通用逻辑门电路对应的门级原始结构,一个逻辑门可以通过定义其函数名、输入和输出来表示。门级原始结构可以用于定义较大规模的电路。 门级原始结构又称门实例化 gate instantiation,语法如下:


  1. gate_name [inst_name](output_port,input_port{,input_port});

例如,一个2输入与门,其输出为y,输入为x1和x2,则该与门可以表示为:


  1. and( y, x1, x2 );

一个3输入或门,可以定义为:


  1. or( y, x1, x2, x3 );

一个3输入异或门,可以定义为:


  1. xor( y, x1, x2, x3 );

表1 Verilog门

名称函数名关键字用法
与门andand(f,a,b,...)
与非门nandnand(f,a,b,...)
或门oror(f,a,b,...)
或非门nornor(f,a,b,...)
异或门xorxor(f,a,b,...)
异或非门nxornxor(f,a,b,...)
非门notnot(f,a)
缓冲器bufbuf(f,a)

测试说明

请在右侧代码窗格中补充完成Verilog代码,点击右下方的评测按钮,平台会对你编写的代码进行测试! 以下是测试用例:


  1. VCD info: dumpfile test.vcd opened for output.
  2. time x1 x2 s f
  3. 0 0 0 0 0
  4. 1 1 0 0 1
  5. 3 1 1 0 1
  6. 7 1 1 1 1
  7. 8 0 1 1 1
  8. 10 0 0 1 0
  9. 14 0 0 0 0
  10. 15 1 0 0 1
  11. 17 1 1 0 1
  12. 21 1 1 1 1
  13. 22 0 1 1 1
  14. 24 0 0 1 0
  15. 28 0 0 0 0
  16. 29 1 0 0 1
  17. 31 1 1 0 1
  18. 35 1 1 1 1
  19. 36 0 1 1 1
  20. 38 0 0 1 0
  21. 42 0 0 0 0
  22. 43 1 0 0 1
  23. 45 1 1 0 1
  24. 49 1 1 1 1

开始你的任务吧,祝你挑战成功!

module mux_gate_struc(x1, x2, s, f);
	input x1, x2, s;
	output f;

	not (k, s);
/**************** begin of blank1 ***********************/
   //请补充完成相应的门级原始结构描述
	not( k, s );
    and( g, x1, k);
    and( h, s, x2);
	or( f, g, h);
/**************** end of blank1 ***********************/

endmodule 

 第4关:电路功能描述—行为定义—连续赋值

 

实验目的

熟悉用Verilog HDL描述电路模块功能的基本方法,掌握连续赋值的使用方法。

实验任务

用连续赋值的方式描述2选1多路选择器,在右侧代码窗格中补充完成相应的代码并完成测试。

,

相关知识

逻辑电路的行为定义

在设计大规模电路时,使用门级原始结构会很繁琐。可行的选择是采用更为抽象的表达式和编程结构描述逻辑电路的行为。

用逻辑表达式定义电路

上图所示的选择器可用如下逻辑代数表达式表示:

f=sx1​+sx2​

在Verilog中,与、或、非运算分别用 &、|、~ 表示,使用关键词assign对f进行连续赋值,如下:


  1. assign f = (~s & x1)|(s & x2 );

assign语句是并行语句,语法形式如下:


  1. assign net_assignment{,net_assignment};

用过程语句定义电路

使用过程语句定义电路是更高层次的抽象,过程语句要放在相应的编程结构中。该知识点放在下一个关卡中进行详细讲解。

测试说明

请在右侧代码窗格中补充完成Verilog代码,点击右下方的评测按钮,平台会对你编写的代码进行测试! 以下是测试用例:


  1. VCD info: dumpfile test.vcd opened for output.
  2. time x1 x2 s f
  3. 0 0 0 0 0
  4. 1 1 0 0 1
  5. 3 1 1 0 1
  6. 7 1 1 1 1
  7. 8 0 1 1 1
  8. 10 0 0 1 0
  9. 14 0 0 0 0
  10. 15 1 0 0 1
  11. 17 1 1 0 1
  12. 21 1 1 1 1
  13. 22 0 1 1 1
  14. 24 0 0 1 0
  15. 28 0 0 0 0
  16. 29 1 0 0 1
  17. 31 1 1 0 1
  18. 35 1 1 1 1
  19. 36 0 1 1 1
  20. 38 0 0 1 0
  21. 42 0 0 0 0
  22. 43 1 0 0 1
  23. 45 1 1 0 1
  24. 49 1 1 1 1

开始你的任务吧,祝你挑战成功

 module mux_assign_behav(x1, x2, s, f);
	input x1, x2, s;
	output f;

/**************** begin of blank1 ***********************/
   //请用连续赋值方式描述2选1多路选择器
	assign f = (~s & x1)|(s & x2);

/**************** end of blank1 ***********************/

endmodule 

第5关:电路功能描述—行为定义—过程语句 

 

实验目的

熟悉用Verilog HDL描述电路模块功能的基本方法,掌握always编程结构和过程语句if - else 的使用方法。

实验任务

always结构和if - else语句描述2选1多路选择器,在右侧代码窗格中补充完成相应的代码并完成测试。

,

相关知识

逻辑电路的行为定义

在设计大规模电路时,使用门级原始结构会很繁琐。可行的选择是采用更为抽象的表达式和编程结构描述逻辑电路的行为。

用逻辑表达式定义电路

见上一关。

用过程语句定义电路

使用过程语句定义电路是更高层次的抽象,过程语句要放在相应的编程结构中。 上图所示的选择器电路可以表述成:如果s=0,则f=x1;如果s=1,则f=x2。在Verilog中,这种功能可以用if-else语句定义,如下:


  1. if(s)
  2. f=x2;
  3. else
  4. f=x1;

Verilog要求过程语句必须包含在always块结构中,语法如下:


  1. always @(sensitivity_list)
  2. [begin]
  3. [procedural assignment statements] //过程赋值语句
  4. [if-else statements] //if-else语句
  5. [case statements] //case语句
  6. [while, repeat, and for loops] //循环语句
  7. [task and function calls] //任务和函数调用
  8. [end]

几点说明: 1.敏感信号列表中的信号用逗号,或者or分隔; 2.always块中的输出信号必须定义成寄存器型reg; 3.always块中的语句顺序执行; 4.一个Verilog模块中可以包含多个always块; 5.一整个always块可以看成是一个并行语句。 特别说明: 门级原始结构、连续赋值、过程语句与编程结构这三种功能描述风格不是孤立,可以在一个module中同时出现。

测试说明

请在右侧代码窗格中补充完成Verilog代码,点击右下方的评测按钮,平台会对你编写的代码进行测试! 以下是测试用例:


  1. VCD info: dumpfile test.vcd opened for output.
  2. time x1 x2 s f
  3. 0 0 0 0 0
  4. 1 1 0 0 1
  5. 3 1 1 0 1
  6. 7 1 1 1 1
  7. 8 0 1 1 1
  8. 10 0 0 1 0
  9. 14 0 0 0 0
  10. 15 1 0 0 1
  11. 17 1 1 0 1
  12. 21 1 1 1 1
  13. 22 0 1 1 1
  14. 24 0 0 1 0
  15. 28 0 0 0 0
  16. 29 1 0 0 1
  17. 31 1 1 0 1
  18. 35 1 1 1 1
  19. 36 0 1 1 1
  20. 38 0 0 1 0
  21. 42 0 0 0 0
  22. 43 1 0 0 1
  23. 45 1 1 0 1
  24. 49 1 1 1 1

开始你的任务吧,祝你挑战成功!

  module mux_proc_behav(x1, x2, s, f);
	input x1, x2, s;
	output f;
/**************** begin of blank1 ***********************/
   //请将输出信号定义为寄存器型
	
/**************** end of blank1 ***********************/

/**************** begin of blank2 ***********************/
  
/**************** end of blank2 ***********************/
/**************** begin of blank3 ***********************/
  	 	//请用过程语句if-else描述2选1多路选择器
	
    	assign f = (~s&x1)|(s&x2);
    
    
    
/**************** end of blank3 ***********************/

endmodule 

 

 

标签:语句,入门,代码,练习,电路,Verilog,x2,x1
来源: https://blog.csdn.net/qq_53149358/article/details/121841055

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有