数电educoder的verilog参考答案
文章目录
- 一、基本运算器
- 1.一位全加器
- 2.无符号8位二进制数加法器
- 3.八位减法器
- 4.定点二进制数的补码加减法运算器
- 二、编码器和译码器
- 1.编码器
- 2.译码器
- 三、组合逻辑电路入门
- 1.三人表决电路
- 2.多路选择器
- 四、组合逻辑电路进阶
- 1.半加器
- 2.全加器
- 3.显示译码器
- 五、时序逻辑电路入门
- 1.计数器
- 2.移位寄存器
- 六、时序逻辑电路进阶
- 1.六位十进制计数器
- 2. 24位寄存器
- 七、序列检测器
- 1. 四位寄存器
- 2.序列检测器
- 八、数字频率计
- 1.测频时序控制电路
- 2.数字频率计
(不知道怎么弄成verilog的高亮,复制粘贴到编译器上面看吧)
一、基本运算器
1.一位全加器
module fa_behavioral(a,b,ci,s,co);//考虑进位的加法器模块 input a,b;//输入端口,默认为wire型的input ci;output s;//输出端口output co;reg s;//寄存器,此时由默认的wire型转成了reg型reg co;always @(a or b or ci)//a,b,ci为变化量,只要一个发生变化就执行always内部程序begin //begin,end类似于c语言里的{}{co,s} = a + b + ci;//{}为拼接,很有用,co即为进位end
endmodule
2.无符号8位二进制数加法器
module adder(a,b,cin,cout,sum);parameter bit_width=8;//类似const intinput [bit_width-1:0] a,b;//定义8位wire型变量input cin;output [bit_width-1:0] sum;output cout;reg sum,cout;always @(cin or a or b)begin{cout,sum}=cin+a+b;end
endmodule
3.八位减法器
module substractor(a,b,cin,cout,sum);parameter bit_width=8;input [bit_width-1:0] a,b;input cin;output [bit_width-1:0] sum;output cout;reg sum,cout;always @(a or b or cin)begin{cout,sum}=a-b-cin;//重点是这些公式end
endmodule
4.定点二进制数的补码加减法运算器
(说实话,这个初学的话还挺难的,尽量看懂理解吧)
涉及到双符号位补码,双符号位有助于判断是否溢出。
module add_sub(a,b,control,cout,overflow,sum);parameter bit_width=4;input [bit_width-1:0] a,b; input control;output[bit_width-1:0] sum; output cout,overflow;reg overflow,cout; reg [bit_width-1:0] sum;reg [bit_width:0] a2,b2,sum2; always @(a or b or control)beginb2[bit_width]=b[bit_width-1];b2[bit_width-1:0]=b[bit_width-1:0];a2[bit_width]=a[bit_width-1];a2[bit_width-1:0]=a[bit_width-1:0];if(!control)begin{cout,sum2}=a2+b2;endelsebegin{cout,sum2}=a2+(~b2)+1;endoverflow=sum2[bit_width]^sum2[bit_width-1];sum[bit_width-1:0]=sum2[bit_width-1:0];end
endmodule
二、编码器和译码器
1.编码器
//设计一个输入输出均为高电平有效的3位二进制优先编码器
//I[7]的优先权最高,I[0]的优先权最低
module encoder8_3_test(I,Y);
input [7:0] I;
output reg[2:0] Y;
always @(I)beginif(I >= 8'b00000000 && I < 8'b00000010)Y = 3'b000;if(I >= 8'b00000010 && I < 8'b00000100)Y = 3'b001;if(I >= 8'b00000100 && I < 8'b00001000)Y = 3'b010;if(I >= 8'b00001000 && I < 8'b00010000)Y = 3'b011;if(I >= 8'b00010000 && I < 8'b00100000)Y = 3'b100;if(I >= 8'b00100000 && I < 8'b01000000)Y = 3'b101;if(I >= 8'b01000000 && I < 8'b10000000)Y = 3'b110;if(I >= 8'b10000000)Y = 3'b111;end
endmodule
2.译码器
//设计具有一位使能端的3线-8线译码器。当使能端为0时,8位输出信号全为0;
//如果一位使能信号为1,则输出高电平有效的译码信号。
module decoder3e_test(a,ena,y);input [2:0] a;input ena;output reg[7:0] y;always @(ena or a)
beginif(ena==1'b0)beginy=8'b000000000;endelsebegincase(a)3'b000:y=8'b00000001;3'b001:y=8'b00000010;3'b010:y=8'b00000100;3'b011:y=8'b00001000;3'b100:y=8'b00010000;3'b101:y=8'b00100000;3'b110:y=8'b01000000;3'b111:y=8'b10000000;default:y=8'b00000000;endcaseend
end
endmodule
三、组合逻辑电路入门
1.三人表决电路
module JG3(ABC,X,Y);input [2:0] ABC;output reg X, Y;reg [1:0] cnt;integer i;always@(ABC)if(ABC==0)beginX=1'b0;Y=1'b1;endelse if(ABC[2]==1'b0)beginX=0;Y=0;endelsebegincnt=0;for(i=0;i<3;i=i+1)beginif(ABC[i])cnt=cnt+1;endif(cnt[1]==1)X=1'b0;Y=1'b0;end
endmodule
2.多路选择器
module mux21(a,b,s,y);input a,b,s;output y;reg y;always @(a,b,s)beginy = s ? b : a;end
endmodule
四、组合逻辑电路进阶
1.半加器
module hadder_test(a,b,cout,sum);
input a,b;
output reg cout,sum;
always @(a or b)
begin{cout,sum}=a+b;
end
endmodule
2.全加器
module fadder_test(a,b,ci,s,co);//考虑进位的加法器模块
input a,b,ci;
output reg s,co;
always @(a or b or ci)
begin{co,s}=a+b+ci;
end
endmodule
3.显示译码器
module JG3(ABC,X,Y);input [2:0] ABC;output reg X, Y;reg [1:0] cnt;integer i;always@(ABC)if(ABC==0)beginX=1'b0;Y=1'b1;endelse if(ABC[2]==1'b0)beginX=0;Y=0;endelsebegincnt=0;for(i=0;i<3;i=i+1)beginif(ABC[i])cnt=cnt+1;endif(cnt[1]==1)X=1'b0;Y=1'b0;end
endmodule
五、时序逻辑电路入门
1.计数器
module count_test(en,clk,clr,cout,outy);
input en,clk,clr;
output [3:0]outy;
output cout;
reg [3:0]outy;
reg [2:0] cnt;
integer i;
always @ (posedge clk or posedge clr)beginif(clr)outy<=4'b0000;else if(en)begincnt=3'b000;for(i=0;i<4;i=i+1)if(outy[i])cnt=cnt+1;if(cnt==3'b100)beginouty<=4'b0000;endelseouty<=outy+1;endendassign cout=((outy==4'b1111)&&(en))?1:0;
endmodule
2.移位寄存器
(我们当时考试考了这个)
module shift_test(din,s,srsi,slsi,clk,clr,dout);input[7:0] din;input[1:0] s;input srsi,slsi,clk,clr;output [7:0] dout;reg [7:0] dout; always@(posedge clk or negedge clr)
beginif(!clr) dout <= 0;else if(s == 2'b01) begindout[0] <= dout[1];dout[1] <= dout[2];dout[2] <= dout[3];dout[3] <= dout[4];dout[4] <= dout[5];dout[5] <= dout[6];dout[6] <= dout[7];dout[7] <= srsi;endelse if(s == 2'b10)begindout[7] <= dout[6];dout[6] <= dout[5];dout[5] <= dout[4];dout[4] <= dout[3];dout[3] <= dout[2];dout[2] <= dout[1];dout[1] <= dout[0];dout[0] <= slsi;endelse if(s == 2'b11)dout[7:0] = din[7:0];elsedout[7:0]=dout[7:0];end
endmodule
六、时序逻辑电路进阶
1.六位十进制计数器
这题确实太难了点,可以放弃。
module counter6bit_test(ENA,CLR,F_IN,Q);input ENA;input CLR;input F_IN;output [23:0] Q; reg [23:0] Q;reg F_OUT;
always @ (posedge F_IN)beginif (CLR == 1'b1) Q <= 24'b0000_0000_0000_0000_0000_0000; elseif(ENA == 1'b0) Q[3:0] <= Q[3:0];elseif (Q[3:0] < 4'b1001) Q[3:0] <= Q[3:0] +4'b0001;elsebeginQ[3:0] <= 4'b0000;if (Q[7:4] < 4'b1001)Q[7:4] <= Q[7:4] + 4'b0001;elsebeginQ[7:4] <= 4'b0000;if (Q[11:8] < 4'b1001)Q[11:8] <= Q[11:8] + 4'b0001;elsebeginQ[11:8] <= 4'b0000;if (Q[15:12] < 4'b1001)Q[15:12] <= Q[15:12] + 4'b0001;elsebeginQ[15:12] <= 4'b0000;if (Q[19:16] < 4'b1001)Q[19:16] <= Q[19:16] + 4'b0001;elsebeginQ[19:16] <= 4'b0000;if (Q[23:20] < 4'b1001)Q[23:20] <= Q[23:20] + 4'b0001;elseQ[23:20] <= 4'b0000;endendendendendend
endmodule
2. 24位寄存器
module latch24_test( d, clk,q );input[23:0] d;input clk;output [23:0] q;reg[23:0] q;always @(posedge clk)q<=d;
endmodule
第七个和第八个可以不需要了解,太难了。
七、序列检测器
1. 四位寄存器
module dff4_test(d,clk,clrn,q);// 请在下面添加代码,完成4位寄存器逻辑功能
parameter width=4;input [width-1:0] d;input clk,clrn;output [width-1:0] q;reg [width-1:0] q;always @(negedge clrn or posedge clk)if (clrn==0) begin q<=0; endelse q<=d;
endmodule
2.序列检测器
module detected_test(ds,setd,clk,clrn,dc,c);input ds,clk,clrn; input [7:0] setd;output [3:0] c; output dc;reg [3:0] c; parameter s0=4'b0000,s1=4'b0001,s2=4'b0010,s3=4'b0011,s4=4'b0100,s5=4'b0101,s6=4'b0110,s7=4'b0111,s8=4'b1000;always@(posedge clk or negedge clrn)beginif(!clrn)c<=s0;elsecase(c)s0:if(ds==setd[7])c<=s1;else c<=s0; s1:if(ds==setd[6])c<=s2;else c<=s0; s2:if(ds==setd[5])c<=s3;else c<=s0; s3:if(ds==setd[4])c<=s4;else c<=s0; s4:if(ds==setd[3])c<=s5;else c<=s0; s5:if(ds==setd[2])c<=s6;else c<=s0;s6:if(ds==setd[1])c<=s7;else c<=s0;s7:if(ds==setd[0])c<=s8;else c<=s0; default:c<=s0;endcaseendassign dc=(c==s8)?1:0;
endmodule
八、数字频率计
1.测频时序控制电路
module tf_ctrl_test(clk,enb,lock,clr);input clk;output enb,lock,clr;reg enb,lock,clr;reg [3:0]count; initial begin enb=0;lock=0;clr=0;count=0;endalways @(posedge clk)begin count<=count+4'b0001;if (count<=7)begin enb<=1;clr<=0;lock<=0;endelse if (count==9)begin enb<=0;clr<=0;lock<=1;endelse if (count==13)begin enb<=0;clr<=1;lock<=0;endelse if (count==15)begin enb<=0;clr<=0;lock<=0;count<=0;endelse begin enb<=0;clr<=0;lock<=0;endend
endmodule
2.数字频率计
module szplj_test(f_in,clk,q);input clk,f_in;output [23:0] q ;wire [23:0]d;wire clr,enb,lock;tf_ctrl tf_ctrl(clk,enb,lock,clr);counter6bit counter6bit(enb,clr,f_in,d);latch24 latch24(d,lock,q);
endmodulemodule tf_ctrl(clk,enb,lock,clr);input clk;output enb,lock,clr;reg enb,lock,clr;reg [3:0]count; initial begin enb=0;lock=0;clr=0;count=0;endalways @(posedge clk)begin count<=count+4'b0001;if (count<=7)begin enb<=1;clr<=0;lock<=0;endelse if (count==9)begin enb<=0;clr<=0;lock<=1;endelse if (count==13)begin enb<=0;clr<=1;lock<=0;endelse if (count==15)begin enb<=0;clr<=0;lock<=0;count<=0;endelse begin enb<=0;clr<=0;lock<=0;endend
endmodulemodule counter6bit(ENA,CLR,F_IN,Q);input ENA;input CLR;input F_IN;output [23:0] Q; reg [23:0] Q;reg F_OUT;always @ (posedge F_IN)beginif (CLR == 1'b1) Q <= 24'b0000_0000_0000_0000_0000_0000; elseif(ENA == 1'b0) Q[3:0] <= Q[3:0];elseif (Q[3:0] < 4'b1001) Q[3:0] <= Q[3:0] +4'b0001;else// 请在下面添加代码,完成6位十进制计数器/* Begin */beginQ[3:0] <= 4'b0000;if (Q[7:4] < 4'b1001)Q[7:4] <= Q[7:4] + 4'b0001;elsebeginQ[7:4] <= 4'b0000;if (Q[11:8] < 4'b1001)Q[11:8] <= Q[11:8] + 4'b0001;elsebeginQ[11:8] <= 4'b0000;if (Q[15:12] < 4'b1001)Q[15:12] <= Q[15:12] + 4'b0001;elsebeginQ[15:12] <= 4'b0000;if (Q[19:16] < 4'b1001)Q[19:16] <= Q[19:16] + 4'b0001;elsebeginQ[19:16] <= 4'b0000;if (Q[23:20] < 4'b1001)Q[23:20] <= Q[23:20] + 4'b0001;elseQ[23:20] <= 4'b0000;endendendendend/* End */endendmodulemodule latch24( d, clk,q );
output [23:0] q;
reg [23:0] q;
input[23:0] d;
input clk;
always @( posedge clk )// 请在下面添加代码,完成24位寄存器/* Begin */q <= d;/* End */
endmodule
数电educoder的verilog参考答案相关推荐
- 【杭电数电实验】verilog入门指北
verilog入门指北 前言 指北内容 面向人群 基础实验 1-15 代码参考 正文 ISE 的安装 实验的基本操作流程 可能出现的问题 创建工程闪退 希望删除某一文件,实际上并没有删除 如何编写测试 ...
- 机电系统计算机考试题,微机电系统习题及参考答案.doc
第1.2章 习题及参考答案 MEMS的设计涉及那些学科?简述MEMS的设计方法及特点. MEMS综合了机.电.磁 .光.声.热.液.气.生物.化学与多种学科而构成了一门独立的交叉学科.它研究多种学科各 ...
- Web程序设计基础 educoder头歌参考答案
为防止和谐,请移步博客查看
- Verilog实现交通灯(数电课设)----------旧
这里是新写的交通灯Verilog实现交通灯(数电课设)----------新:https://blog.csdn.net/qq_41467882/article/details/86626507 里边 ...
- 基于FPGA的数字电子琴——数电小系统设计【数字电子技术】(使用Vivado中的verilog语言)含piano代码文件(全)
目录 一.电路功能描述 二.方案设计 1. 总体设计方案 2. 对原理框图或程序流程图做出简单解释 3. 各模块介绍 3.1 音频驱动模块 3.2 LED显示模块 3.3 数码管显示模块 3.4 矩阵 ...
- 【数电实验7】Verilog—外星萤火虫
[2022.05西南交大数电实验] [本代码及波形已通过老师验收.仅供参考.] [参考博客:[数电实验]外星萤火虫设计_难凉oh的博客-CSDN博客] [建议:有些口语化的注释看完删掉比较好哈,怕老师 ...
- 菱形数阵c语言,二年级奥数数阵习题及参考答案.doc-资源下载在线文库www.lddoc.cn...
二年级 奥数 数阵习题及参考答案.doc 2016春季数学集训二队每周习题3参考答案星期一1.将自然数1,2,3,按下表的规律排列.问55应该出现在哪个字母所在的一列如果1.2.3.4所在的那行称作第 ...
- verilog 自动售货机状态机实现_基于Verilog语言的简单自动售货机-数电课设报告(最终版)最新版...
<基于Verilog语言的简单自动售货机-数电课设报告.docx>由会员分享,可免费在线阅读全文,更多与<基于Verilog语言的简单自动售货机-数电课设报告(最终版)>相关文 ...
- verilog设置24进制计数器_任意进制计数器 || 反馈复位法 反馈置数法 || 超级重点 || 数电...
任意进制计数器 || 反馈复位法 反馈置数法 || 超级重点 || 数电 前面介绍了4位二进制计数器和十进制计数器,但它们的计数长度.计数方式是固定的. 例如: 十进制计数器74160,其计数的模为1 ...
- reg类型变量综合电路_2014年PLD习题集(含参考答案)数字系统设计
下载word有问题请添加微信号:xuecool-com或QQ:370150219处理(尽可能给您提供完整文档),感谢您的支持与谅解. 第1章习题 1.1 名词解释 PROM CPLD FPGA ASI ...
最新文章
- 用好 Java 中的枚举,让你的工作效率飞起来!
- 北京计算机工业学校96届,刘驰_北京理工大学计算机学院
- ORACLE 表类型 OLTP和OLAP
- go 调用其他文件函数_一文读懂Go中软件包概念
- 常用类回顾之(String类)
- Python之数据分析(生成动态图像、示波器效果)
- 如何使用SQL Server Reporting Services将数据格式转换为有价值的数据集
- No compiler is provided in this environment. Perhaps you are running on a JRE
- .NET重要技术思考
- 山峰Mac动态桌面壁纸
- python 声音强度检测_python – 从声音文件中检测频率
- 深圳西丽车管所科目二驾考攻略
- 手机RAM、ROM和储存卡的那些事
- 2018金山WPS实习面试
- java字母排序_Java实现按照大小写字母顺序排序的方法
- 电子认证许可证书(电子签名 需要 什么资质)
- SpringBoot集成Swagger2,以及Swagger2常用API
- 双边滤波去噪matlab代码,双边滤波器原理及其matlab实现
- vijos1153:猫狗大战
- Cisco Catalyst 6500 10Gb以太网模块