我是靠谱客的博主 多情电灯胆,最近开发中收集的这篇文章主要介绍【计组之EDA】学了EDA,这些基础verilog代码题你都会了叭????????????前言????????????一、设计一个8位计数器,每次时钟上升沿时计数加1,当计数器溢出时,自动从0开始重新计数。????????????二、分别用任务和函数描述一个4选1多路选择器。????????????三、试编写求补码的verilog程序,输入是带符号的8位二进制数。????????????四、试编写两个4位二进制数相减的verilog程序。????????????五、写一个比较电路,当输入的一位8,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录:

  • ????????????前言
  • ????????????一、设计一个8位计数器,每次时钟上升沿时计数加1,当计数器溢出时,自动从0开始重新计数。
  • ????????????二、分别用任务和函数描述一个4选1多路选择器。
      • ????????????1、函数
      • ????????????2、任务
  • ????????????三、试编写求补码的verilog程序,输入是带符号的8位二进制数。
  • ????????????四、试编写两个4位二进制数相减的verilog程序。
  • ????????????五、写一个比较电路,当输入的一位8421BCD码大于4时,输出为1,否则为0。试编写verilog程序。
  • ❤️❤️❤️忙碌的敲代码也不要忘了浪漫鸭!

????????????前言

✨你好啊,我是“ 怪& ”,是一名在校大学生哦。
????主页链接:怪&的个人博客主页
☀️博文主更方向为:课程学习知识、作业题解、期末备考。随着专业的深入会越来越广哦…一起期待。
❤️一个“不想让我曾没有做好的也成为你的遗憾”的博主。
????很高兴与你相遇,一起加油!

????????????一、设计一个8位计数器,每次时钟上升沿时计数加1,当计数器溢出时,自动从0开始重新计数。

moudle count8(clk,out);
input clk;
output reg[7:0] out;
always @(posedge clk)
	begin
	if (out==8'b11111111) out=0;
	else out=out+1;
	end
endmodule

上述代码的判断语句if (ount==8'b11111111) out=0; else out=out+1;等价于out=out+1;
因为 out=out+1;out有八位,越位超出则不会显示第九位。

????????????二、分别用任务和函数描述一个4选1多路选择器。

模块化思想:任务、函数。

????????????1、函数

function max41;
input a1,a2,a3,a4;
input[1:0]s;
begin case(s)
	2'b00 max41=a1;
	2'b01 max41=a2;
	2'b10 max41=a3;
	2'b11 max41=a4;
endcase
end
endfunction

函数只有输入,且输出为函数名本身;不能输入reg型。

????????????2、任务

task max41;
input a1,a2,a3,a4;
output max41;
input[1:0]s;
begin case(s)
	2'b00 max41=a1;
	2'b01 max41=a2;
	2'b10 max41=a3;
	2'b11 max41=a4;
endcase
end
endtask

任务有输入、有输出,不能输入reg型

????????????三、试编写求补码的verilog程序,输入是带符号的8位二进制数。

计算识别数,默认其为带符号数

module test(in,out);
input [7:0]in;
output reg [7:0]out;
always	@(in) 
	begin
	if(in[7]==0) out=in;	//此句可改为:if(~in[7]) out=in; 
	else out=((~in+1)|8'H80);//|8'H80,是让符号位再变为1
	end
endmodule

????????????四、试编写两个4位二进制数相减的verilog程序。

module test(a1,a2,out);
input [3:0]a1,a2;
output reg [4:0]out;

function [3:0]abs;//取绝对值操作
input [3:0]a;
	begin 
	if(~a[3]) abs=a;
	else abs=~a+1;
	end
endfunction;

always@(a1,a2)
	begin
	case({a1[3],a2[3]}) //此处加大括号是将两者合在一起
		2'b00:out=a1-a2;			//a1正,a2正
		2'b01:out=a1+abs(a2);		//a1正,a2负
		2'b10:out=-(abs(a1)+a2);	//a1负,a2正
		2'b11:out=abs(a2)-abs(a1);  //a1负,a2负
	endcase
	end
endmodule

????????????五、写一个比较电路,当输入的一位8421BCD码大于4时,输出为1,否则为0。试编写verilog程序。

module test(a,out);
input [3:0]test;
output out;
always @(a)
	if(a<4) out=0;
	else out=1;
end
endmodule

注:if(a<4) out=0;不能改为if(a-4<0) out=0;
例如a=1时:a-4表示为
0001 1的补码
+ 1100 -4的补码
= 1101 1101的补码为1011(值为-3)计算机默认存的为补码,需转化为原码
但是 1101与0000比较,第一位(符号位)1>0,判断结果为1-4>0,导致出错。

❤️❤️❤️忙碌的敲代码也不要忘了浪漫鸭!

????要一起学好EDA与计组哦!????????????

请添加图片描述

最后

以上就是多情电灯胆为你收集整理的【计组之EDA】学了EDA,这些基础verilog代码题你都会了叭????????????前言????????????一、设计一个8位计数器,每次时钟上升沿时计数加1,当计数器溢出时,自动从0开始重新计数。????????????二、分别用任务和函数描述一个4选1多路选择器。????????????三、试编写求补码的verilog程序,输入是带符号的8位二进制数。????????????四、试编写两个4位二进制数相减的verilog程序。????????????五、写一个比较电路,当输入的一位8的全部内容,希望文章能够帮你解决【计组之EDA】学了EDA,这些基础verilog代码题你都会了叭????????????前言????????????一、设计一个8位计数器,每次时钟上升沿时计数加1,当计数器溢出时,自动从0开始重新计数。????????????二、分别用任务和函数描述一个4选1多路选择器。????????????三、试编写求补码的verilog程序,输入是带符号的8位二进制数。????????????四、试编写两个4位二进制数相减的verilog程序。????????????五、写一个比较电路,当输入的一位8所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部