数字电路的FPGA设计与实现基础篇.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数字电路的FPGA设计与实现基础篇

数字电路的FPGA设计与实现基础篇 杨凡,邮箱lvfanzai@ MSN:lvfanzai@ 大家给点意见~~有助于我进一步的学习!1 三态门(总线) 三态门有:bufif0,bufif1,notif0,notif1。 总线是运算部件之间数据流通的公共通道,在硬线逻辑构成的运算电路中只要电路的规模允许,可以比较自由地确定总线的宽度,可以提高数据流通的速度。 2.1.2 异或门 xor A1(T,A,B); 2.1.3 编译码器:利用case进行编程(38译码器和83优先解码器的编程比较简单仿真在这里就就不做说明) 2.1.4 全加器:(门级结构实现,数据流,过程语句) 数据流描述的4位加法器 Module adder4(a,b,cin,,cout,s); Input [3:0] a,b;Input cin;Output c;Output [3:0] s; Reg [3;0] s; Assign {c,s}=a+b+cin;//利用位拼接实现结果的进位 endmodule 2.1.5 多位串行进位加法器 多位串行进位加法器虽然简单但是速度较慢,一般使用超前进位加法器 2.1.6 数据选择器:(if else 语句,case语句描述实现) 多位的数据选择器大部分情况下我大部分代码都用case分支选择语句很容易实现,另外还可以利用行为和数据流描述方式简单的组合逻辑编码也是一样的。 数据流描述的选择器(2选1) Module mux21(out,a,b,sel); Input a,b,sel; Output out; Assign out=sel?a:b;endmodule 2.1.7 数值比较器(直接比较两个数的大小可以利用上面数据选择器使用的数据流描述方法来实现);要具体比较出两者的关系利用以下代码仿真: module cmp(A,B,FA,FB,FE); parameter width=9; input [width:0] A,B; output [1:0] FA,FB,FE; assign FA=(AB);// 当A大于B时FA输出为1 assign FB=(AB);//当A小于B时FB输出为1 assign FE=(A==B);//当A等于B时FE输出为1 endmodule 仿真产生波形如下 2.1.8 奇偶校验器(设计并行输入的6位数据对其进行奇偶校验代码如下) module jiou(ji,ou,indata); input [5:0] indata;output ji,ou;assign ji=^indata;//产生奇校验 assign ou=~ji;//产生偶校验 endmodule 仿真波形如下 2.2 时序逻辑基础 2.2.1 触发器(D触发器, 基本RS触发器,JK触发器) D触发器的verilog仿真不带复位端 module df(clk,D,Q,QB); input clk,D; output Q,QB; reg Q; assign QB=~Q; always @(posedge clk) begin Q=D; end endmodule 带复位端的D触发器(异步/同步清零异/同步步置1的D触发器) module DFFr(clk,reset,D,Q,QB); input clk,reset,D; output Q,QB; reg Q,QB; always @(posedge clk or posedge reset) begin if(reset) begin Q=0;QB=1;end else begin Q=D;QB=~D;end //Procedural assignment to a non-register QB is not permitted. end endmodule 仿真过程中遇到了定义QB的类型的错误问题,错误提示见注释 分析:assign语句中不能使用reg类型的变量,在 always语句中每一个信号都必须是reg类型的。仿真波形如下 基本RS触发器的verilog仿真 module RSF(clk,R,S,D,Q,QB); input R,S,D,clk; output Q,QB; reg Q; assign QB=~Q; always @(posedge clk) case({R,S}) 2b00: Q=0;//当R=0,S=0时输出为0 2b01: Q=1;// 当R=0,S=1时 置位输出为1 2b10: Q=0;// 当R=1,S=0时 复位输出为0 2b11: Q=1bx;// 当R=1,S=1时输出为不确定状态 endcase endmodul

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档