文章目录

  • 一、基本运算器
    • 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参考答案相关推荐

  1. 【杭电数电实验】verilog入门指北

    verilog入门指北 前言 指北内容 面向人群 基础实验 1-15 代码参考 正文 ISE 的安装 实验的基本操作流程 可能出现的问题 创建工程闪退 希望删除某一文件,实际上并没有删除 如何编写测试 ...

  2. 机电系统计算机考试题,微机电系统习题及参考答案.doc

    第1.2章 习题及参考答案 MEMS的设计涉及那些学科?简述MEMS的设计方法及特点. MEMS综合了机.电.磁 .光.声.热.液.气.生物.化学与多种学科而构成了一门独立的交叉学科.它研究多种学科各 ...

  3. Web程序设计基础 educoder头歌参考答案

    为防止和谐,请移步博客查看

  4. Verilog实现交通灯(数电课设)----------旧

    这里是新写的交通灯Verilog实现交通灯(数电课设)----------新:https://blog.csdn.net/qq_41467882/article/details/86626507 里边 ...

  5. 基于FPGA的数字电子琴——数电小系统设计【数字电子技术】(使用Vivado中的verilog语言)含piano代码文件(全)

    目录 一.电路功能描述 二.方案设计 1. 总体设计方案 2. 对原理框图或程序流程图做出简单解释 3. 各模块介绍 3.1 音频驱动模块 3.2 LED显示模块 3.3 数码管显示模块 3.4 矩阵 ...

  6. 【数电实验7】Verilog—外星萤火虫

    [2022.05西南交大数电实验] [本代码及波形已通过老师验收.仅供参考.] [参考博客:[数电实验]外星萤火虫设计_难凉oh的博客-CSDN博客] [建议:有些口语化的注释看完删掉比较好哈,怕老师 ...

  7. 菱形数阵c语言,二年级奥数数阵习题及参考答案.doc-资源下载在线文库www.lddoc.cn...

    二年级 奥数 数阵习题及参考答案.doc 2016春季数学集训二队每周习题3参考答案星期一1.将自然数1,2,3,按下表的规律排列.问55应该出现在哪个字母所在的一列如果1.2.3.4所在的那行称作第 ...

  8. verilog 自动售货机状态机实现_基于Verilog语言的简单自动售货机-数电课设报告(最终版)最新版...

    <基于Verilog语言的简单自动售货机-数电课设报告.docx>由会员分享,可免费在线阅读全文,更多与<基于Verilog语言的简单自动售货机-数电课设报告(最终版)>相关文 ...

  9. verilog设置24进制计数器_任意进制计数器 || 反馈复位法 反馈置数法 || 超级重点 || 数电...

    任意进制计数器 || 反馈复位法 反馈置数法 || 超级重点 || 数电 前面介绍了4位二进制计数器和十进制计数器,但它们的计数长度.计数方式是固定的. 例如: 十进制计数器74160,其计数的模为1 ...

  10. reg类型变量综合电路_2014年PLD习题集(含参考答案)数字系统设计

    下载word有问题请添加微信号:xuecool-com或QQ:370150219处理(尽可能给您提供完整文档),感谢您的支持与谅解. 第1章习题 1.1 名词解释 PROM CPLD FPGA ASI ...

最新文章

  1. 用好 Java 中的枚举,让你的工作效率飞起来!
  2. 北京计算机工业学校96届,刘驰_北京理工大学计算机学院
  3. ORACLE 表类型 OLTP和OLAP
  4. go 调用其他文件函数_一文读懂Go中软件包概念
  5. 常用类回顾之(String类)
  6. Python之数据分析(生成动态图像、示波器效果)
  7. 如何使用SQL Server Reporting Services将数据格式转换为有价值的数据集
  8. No compiler is provided in this environment. Perhaps you are running on a JRE
  9. .NET重要技术思考
  10. 山峰Mac动态桌面壁纸
  11. python 声音强度检测_python – 从声音文件中检测频率
  12. 深圳西丽车管所科目二驾考攻略
  13. 手机RAM、ROM和储存卡的那些事
  14. 2018金山WPS实习面试
  15. java字母排序_Java实现按照大小写字母顺序排序的方法
  16. 电子认证许可证书(电子签名 需要 什么资质)
  17. SpringBoot集成Swagger2,以及Swagger2常用API
  18. 双边滤波去噪matlab代码,双边滤波器原理及其matlab实现
  19. vijos1153:猫狗大战
  20. Cisco Catalyst 6500 10Gb以太网模块

热门文章

  1. B key-M key-BM key
  2. DEM数据和影像数据下载汇总
  3. wxPython 记事本
  4. 尚硅谷springSecurity笔记
  5. C++高校水电费管理系统
  6. 全国雾霾大数据,哪里才是桃花源?
  7. 关于图书馆占座问题的调查
  8. html+字体有白色的重影+重影字体设置,win10字体重影怎么解决_win10电脑字体不清晰有重影修复方法...
  9. 微信小程序之保存图片到手机相册
  10. miracast和乐播投屏_【当贝市场】Windows 10 Mircast投屏到电视教程