当前位置: 首页 > news >正文

4位先行进位电路 logisim_数字集成电路的自动化设计作业—1

1、七人投票表决电路

b725fdfdd248c421dfff9ccd69069bf3.png

683b2237aeef4f738ad1a092d07f2d3b.png
Verilog代码如下:

module vote_7(
input [6:0] Vote,
input Reset,
output Pass);

integer i;
reg [2:0] vote_count;

always @(*) begin
if (Reset)
    begin
vote_count = 3'd0;
    end
  else
    begin
        vote_count = 3'd0;
for (i=0;i<7;i=i+1)
    begin
                    if (Vote[i] == 1) vote_count = vote_count + 1'd1;
                 end
            end
end

assign Pass = (vote_count >= 3'd4) ? 1 : 0;

endmodule

测试代码如下:

//vote_7_tb

`timescale 1 ns/1 ns

module vote_7_tb();
reg [6:0] Vote;
reg Reset;
wire Pass;

vote_7 my_vote_7(
.Vote(Vote),
.Reset(Reset),
.Pass(Pass));

initial
begin
Vote=7'b0000001; Reset=0;
#5 Vote=7'b0000111; Reset=1;
#5 Vote=7'b0001111; Reset=0;
#5 Vote=7'b0011111; Reset=0;
#5 Vote=7'b0111111; Reset=0;
#5 Vote=7'b1111111; Reset=0;
#5 Vote=7'b1100111; Reset=0;
#5 Vote=7'b1100101; Reset=1;
#5 Vote=7'b1110101; Reset=0;
#5 $stop;
end

endmodule

仿真波形如下(清晰显示请点开放大):

f4fe61f6017d0515d011daeb67391d9b.png

2、七人抢答电路

399dfca710a6a3542cf0c9fc7e3b4469.png5b81f553ea83e3d08b0acb7f8cf20ce6.png
Verilog代码如下:

module responder(
input [6:0] vote,
input start,
input reset,
output reg nag,
output reg [2:0] rsp
);

always @(*) begin
if (reset)
begin
    nag = 1'b0;
    sp = 3'b0;
end
else if (start)
begin
    case (vote)
    7'b0000001: begin rsp = 3'b001; nag = 1'b0; end
    7'b0000010: begin rsp = 3'b010; nag = 1'b0; end
    7'b0000100: begin rsp = 3'b011; nag = 1'b0; end
    7'b0001000: begin rsp = 3'b100; nag = 1'b0; end
    7'b0010000: begin rsp = 3'b101; nag = 1'b0; end
    7'b0100000: begin rsp = 3'b110; nag = 1'b0; end
    7'b1000000: begin rsp = 3'b111; nag = 1'b0; end
     default: begin rsp = 3'b000; nag = 1'b0; end
    endcase
end
else if (vote)
    nag = 1'b1;
end

endmodule

测试代码如下:

`timescale 1 ns/1 ns

module responder_tb();

reg [6:0] vote;
reg start;
reg reset;

wire nag;
wire [2:0] rsp;

responder my_responder(
.vote(vote),
.start(start),
.reset(reset),
.nag(nag),
.rsp(rsp)
);

initial
begin
reset=0; start=1; vote=7'b1000000;
#5 reset=1; start=1; vote=7'b1000000;
#5 reset=1; start=0; vote=7'b1000000;
#5 reset=0; start=0; vote=7'b1000000;
#5 reset=0; start=1; vote=7'b0000001;
#5 reset=0; start=1; vote=7'b0000010;
#5 reset=0; start=1; vote=7'b0000100;
#5 reset=0; start=1; vote=7'b0001000;
#5 reset=0; start=1; vote=7'b0010000;
#5 reset=0; start=1; vote=7'b0100000;
#5 reset=0; start=1; vote=7'b1000000;
#5 reset=0; start=1; vote=7'b1111001;
#10 $stop;
end

endmodule

仿真波形如下(清晰显示请点开放大):

898a08443a0f03dd3f34680a97d30310.png
3、模为60的BCD码加法计数器

85c55f144912ce7fb46bc9bfb8d66b12.png4d71361d5fb68d826dbd0318ead61927.png
备注:这里将进位输出cout设置为1位,而不是题目给出的3位。

Verilog代码如下:

module counter_60(
input [7:0] data,
input load,
input reset,
input cin,
input clk,
output reg [7:0] qout,
output cout
);

always @(posedge clk)
    begin
if (reset)
    qout <= 0;
else if (load)
    qout <= data;
else if (cin)
    begin
        if (qout[3:0] == 4'h9)//判断低位是否为9,是则
    begin
qout[3:0] <= 0;//返回0
if (qout[7:4] == 4'h5)//并判断高位是否为5
qout[7:4] <= 0;
else
qout[7:4] <= qout[7:4] + 1'b1;//若高位不为5,则加1
    end
else
    qout[3:0] <= qout[3:0] + 1'b1;//若低位不为9,则加1
end
    end

assign cout = ((qout == 8'h59) & cin) ? 1 : 0; //产生进位输出信号

endmodule

测试代码如下:

`timescale 1 ns/1 ns

module counter_60_tb();

reg [7:0] data;
reg reset, load, cin;
reg clk;
wire [7:0] qout;
wire cout;

counter_60 my_counter_60(
.data(data),
.reset(reset),
.load(load),
.cin(cin),
.clk(clk),
.qout(qout),
.cout(cout)
);

initial
begin
load=1'b0; reset=1'b0; data=8'h00; cin=1'b0;
#5 load=1'b0; reset=1'b1; data=8'h01; cin=1'b0;
#5 load=1'b0; reset=1'b0; data=8'h01; cin=1'b1;
#3 load=1'b1; reset=1'b0; data=8'h38; cin=1'b1;
#40 load=1'b0; reset=1'b0; data=8'h01; cin=1'b1;
#5 load=1'b0; reset=1'b0; data=8'h23; cin=1'b1;
#10 $stop;
end

initial
clk=0;
always
#2 clk = ~clk;

endmodule

仿真波形如下(清晰显示请点开放大):

cfb942c2ab3aaedc218ae4a462acfbc1.png
4、可逆计数器

869abefe558bd8e27686c056161abc6a.png76993e2fbf6e8e9ffef16ee0f2b62dff.pngd52db2a5f9423b9b917bfa9c3e1a0aed.png
备注:这里将进位输出cout设置为1位,而不是题目给出的3位。

Verilog代码如下:

module kn_cnt16(
input [3:0] data,
input clk,
input clr,
input set,
input en,
input updn,
output reg [3:0] qout,
output reg cout);

always @(posedge clk or posedge clr)
begin
if (clr) begin qout <= 0; cout <= 0; end
else if (set) begin qout <= data; cout <= 0; end
else if (en)
begin
    case (updn)
1: begin
if (qout[3:0] == 4'b1111)
begin
qout[3:0] <= 4'b0000;
cout <= 1'b1;
end
else
begin
qout[3:0] <= qout[3:0] + 1'b1;
cout <= 1'b0;
end
end
0: begin
if (qout[3:0] == 4'b0000)
    begin
qout[3:0] <= 4'b1111;
cout <= 1'b1;
end
else
    begin
qout[3:0] <= qout[3:0] - 1'b1;
cout <= 1'b0;
end
end
        endcase
       end
end

endmodule

测试代码如下:

//kn_cnt16_tb

module kn_cnt16_tb();

reg [3:0] data;
reg clk;
reg clr, set, en, updn;
wire [3:0] qout;
wire cout;

kn_cnt16 my_kn_cnt16(
.data(data),
.clk(clk),
.clr(clr),
.set(set),
.en(en),
.updn(updn),
.qout(qout),
.cout(cout)
);

initial
begin
clk=1'b0; clr=1'b0; set=1'b0; en=1'b0; updn=1'b0; data=4'b0001;
#5 clr=1'b0; set=1'b1; en=1'b0; updn=1'b0; data=4'b0010;
#5 clr=1'b0; set=1'b0; en=1'b0; updn=1'b0; data=4'b0010;
#5 clr=1'b0; set=1'b0; en=1'b1; updn=1'b1; data=4'b0010;
#60 clr=1'b1; set=1'b0; en=1'b1; updn=1'b0; data=4'b0010;
#5 clr=1'b0; set=1'b0; en=1'b1; updn=1'b0; data=4'b1110;
#60 clr=1'b1; set=1'b0; en=1'b1; updn=1'b0; data=4'b0010;
#5 $stop;
end

always #2 clk = ~clk;

endmodule

仿真波形如下(清晰显示请点开放大):

5dc947f9dbe8b4468561beb35fa5a4bf.png

5、可变模计数器

292a5cadc95f472f3e6c72c28e20ecbb.png1ec24b6476351e9ed7a7c08031f667d5.png
备注:这里将进位输出cout设置为1位,而不是题目给出的3位。

Verilog代码如下:

module mchang100(
input [6:0] m,
input load,
input clr,
input clk,
output reg [6:0] qout,
output cout);

reg [6:0] md;

always @(posedge clk) begin
md <= m - 1'd1;
if (clr)
begin
qout[6:0] <= 6'd0;
end
else
begin
if (load)
begin
qout[6:0] <= md;
end
else
begin
if (qout[6:0] == md)
begin
qout[6:0] <= 6'd0;
end
else
begin
qout[6:0] <= qout[6:0] + 1'd1;
end
end
end
end

assign cout = (qout[6:0] == md) ? 1 : 0;

endmodule

测试代码如下:

// mchang100_tb

`timescale 1 ns/1 ns

module mchang100_tb();
reg [6:0] m;
reg load, clr;
reg clk;

wire [6:0] qout;
wire cout;

mchang100 my_mchang100(
.m(m),
.load(load),
.clr(clr),
.clk(clk),
.qout(qout),
.cout(cout)
);

initial
begin
clk=1'b0; m=7'b0001111; clr=1'b1; load=1'b0;
#5 m=7'b0001111; clr=1'b0; load=1'b1;
#5 m=7'b0001111; clr=1'b0; load=1'b0;
#50 m=7'b0000010; clr=1'b0; load=1'b1;
#5 m=7'b0000010; clr=1'b0; load=1'b0;
#10 m=7'b0001111; clr=1'b0; load=1'b0;
#5 $stop;
end
always
#1 clk = ~clk;

endmodule

仿真波形如下(清晰显示请点开放大):

下图是15进制

e75925d5cdd874cbad862416fc1a87c5.png
下图是2进制

14091571831ea92ea1a1af81e566efe2.png

相关文章:

  • CodeForces149D dfs实现区间dp
  • 内容可编辑_新标准化煤矿安全生产理念内容(最全)
  • python之基础知识-字符串和编码
  • c++ 与windows服务的通讯_Windows操作系统之不带引号的服务路径提权
  • 10.Spring——框架的AOP
  • 为什么自动关闭_为什么老司机一上车就关掉这个功能?
  • ubuntu安装logisim_Ubuntu server 16.04安装网卡驱动方法
  • 二、C到C++的升级
  • 腐蚀rust研究台抽奖_福世蓝无化学品循环水处理系统 --- 用来控制污垢和腐蚀
  • bat配置JDK环境变量
  • ppt如何旋转流程图_稳准狠!这四款PPT插件的炫酷技能我先抱走了
  • 正确停止线程的方式三 使用Thread类中的内置的中断标记位-----------不熟悉
  • python numpy常用操作_Python numpy的基本操作你一般人都不会
  • option标签中selected属性
  • 地表反射率影响因素_地表反射率计算-flaash.ppt
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【技术性】Search知识
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Electron入门介绍
  • javascript数组去重/查找/插入/删除
  • Java多态
  • JS数组方法汇总
  • Linux各目录及每个目录的详细介绍
  • Linux下的乱码问题
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Web标准制定过程
  • 安卓应用性能调试和优化经验分享
  • 前端临床手札——文件上传
  • 前端之Sass/Scss实战笔记
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 深入浅出Node.js
  • 使用权重正则化较少模型过拟合
  • nb
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • !!java web学习笔记(一到五)
  • #stm32驱动外设模块总结w5500模块
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (java)关于Thread的挂起和恢复
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (poj1.2.1)1970(筛选法模拟)
  • (独孤九剑)--文件系统
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (十三)Flask之特殊装饰器详解
  • (转载)深入super,看Python如何解决钻石继承难题
  • ***原理与防范
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .dwp和.webpart的区别
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .Net接口调试与案例
  • .NET值类型变量“活”在哪?