家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生 家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生
您的位置:网站首页 > 电器维修资料网 > 正文 >

VHDL设计之逻辑综合的原则以及可综合的代码设计风格

★★★★★【文章导读】:VHDL设计之逻辑综合的原则以及可综合的代码设计风格具体内容是:(3)带有posedge或negedge关键字的事件表达式表示沿触发的时序逻辑;没有posedge或negedge关键字的表示组合逻辑或电平敏感的锁存器,或者两种都表示。在表示时序和组合逻辑的事件控制表达式中如有多个沿和多个电平,其…

来源: 日期:2013-11-3 17:30:02 人气:标签:

VHDL设计之逻辑综合的原则以及可综合的代码设计风格

    (3) 带有posedge 或 negedge 关键字的事件表达式表示沿触发的时序逻辑;没有posedge 或negedge关键字的表示组合逻辑或电平敏感的锁存器,或者两种都表示。在表示时序和组合逻辑的事件控制表达式中如有多个沿和多个电平,其间必须用关键字“or” 连接 。

    (4)每个表示时序逻辑的always块只能由一个时钟跳变沿触发,置位或复位 好也由该时钟跳变沿触发。

    (5)每个在always块中赋值的信号都必需定义成reg型或整型。整型变量缺省为32bit,使用Verilog操作符可对其进行二进制求补的算术运算。综合器还支持整型量的范围说明,这样就允许产生不是32位的整型量,句法结构如下:

    integer[:]。

    (6)always块中应该避免组合反馈回路。每次执行always块时,在生成组合逻辑的always块中赋值的所有信号必需都有明确的值;否则需要设计者在设计中加入电平敏感的锁存器来保持赋值前的 后一个值。

    只有这样,综合器才能正常生成电路。如果不这样做,综合器会发出警告,提示设计中插入了锁存器。如果在设计中存在综合器认为不是电平敏感锁存器的组合回路时,综合器会发出错误信息(例如设计中有异步状态机时)。

    用always块设计纯组合逻辑电路时,在生成组合逻辑的always块中,参与赋值的所有信号都必须有明确的值,即在赋值表达式右端参与赋值的信号都必需在always @(敏感电平列表)中列出。

    如果在赋值表达式右端引用了敏感电平列表中没有列出的信号,那么在综合时,将会为该信号产生一个隐含的透明锁存器。这是因为该信号的变化不会立刻引起所赋值的变化,而必须等到敏感电平列表中某一个信号变化时,它的作用才显现出来。

    也就是相当于存在着一个透明锁存器把该信号的变化暂存起来,待敏感电平列表中某一个信号变化时再起作用,纯组合逻辑电路不可能做到这一点。这样,综合后所得电路已经不是纯组合逻辑电路了。这时综合器会发出警告提示设计中插入了锁存器,如下所示:

   

input a,b,c;
reg e,d;
always @(a or b or c) begin
      e = d & a & b;      //因为d没有在敏感电平列表中,所以d变化时,e不能立刻变化,
                              //要等到a或b或c变化时才体现出来。这就是说实际上相当于存在
                              //一个电平敏感的透明锁存器在起作用, 把d信号的变化锁存其中
      d = e | c;
end

(7)对一个寄存器型(reg)或整型(integer)变量的赋值只允许在一个always块内进行,如果在另一always块也对其赋值,这是非法的。
(8)把某一信号值赋为'bx,综合器就把它解释成无关状态,因而综合器为其生成的硬件电路 简洁。


4.5.2  可综合风格的Verilog HDL模块实例
1.组合逻辑电路设计实例


例4.6:8位带进位端的加法器的设计实例(利用简单的算法描述)。

module adder_8(cout,sum,a,b,cin);              //模块声明
      output cout;
      output [7:0] sum;
      input cin;
      input[7:0] a,b;                            //端口声明
      assign {cout,sum} = a + b + cin;          //加法器算法
endmodule

 

例4.7:指令译码电路的设计实例(利用电平敏感的always块来设计组合逻辑)。

'define plus    3'd0                        //操作码的宏定义
'define minus    3'd1
'define band    3'd2
'define bor      3'd3'
'define unegate  3'd4

module alu(out,opcode,a,b);                //模块声明
      output [7:0] out;
      input [2:0] opcode;
      input [7:0] a,b;                      //端口声明
      reg  [7:0] out;                      //寄存器声明

      always @(opcode or a or b) begin      //用电平敏感的always块描述组合逻辑
            case(opcode)
                  'plus: out = a + b;        //算术运算
                  'minus: out = a - b;
                  'band: out = a & b;          //位运算
                  'bor:  out = a | b;
                  'unegate: out = ~a;        //单目运算
                  default: out = 8'hx;
      endcase
      end
endmodule

 

例4.8:比较后重组信号的组合逻辑(利用task和电平敏感的always块设计)。

module sort4(ra,rb,rc,rd,a,b,c,d);        //模块声明
      output [t:0] ra, rb, rc, rd;
      input [t:0] a, b, c, d;              //端口声明
      reg [t:0] ra, rb, rc, rd;
      reg [t:0] va, vb, vc, vd;            //寄存器声明
      parameter t=3;                            //参数声明

      always @(a or b or c or d) begin      //用电平敏感的always块描述组合逻辑
          {va,vb,vc,vd}={a,b,c,d};
          sort2(va,vc);                        //信号重组
          sort2(vb,vd);
          sort2(va,vb);
          sort2(vc,vd);
          sort2(vb,vc);
          {ra,rb,rc,rd}={va,vb,vc,vd};
      end

      task sort2;                            //x与y互换任务
            inout [t:0] x,y;
            reg [t:0] tmp;
            if(x > y) begin
                tmp = x;              //使用临时变量tmp保存x的值
                x = y;
                y = tmp;
      end
      endtask
endmodule

 

例4.9:比较器的设计实例(利用赋值语句设计组合逻辑)。

module compare(equal,a,b);              //模块声明
      output equal;
      input [size-1:0] a,b;            //端口声明
      parameter size=1;                  //参数声明
      assign  equal =(a==b)? 1 : 0;  //比较器
endmodule

 

例4.10:3-8译码器设计实例(利用赋值语句设计组合逻辑)。

module decoder(out,in);            //模块声明
      output [7:0] out;
      input [2:0] in;                //端口声明
      assign  out = 1'b1<<in;      //把 低位的1左移 in(根据从in口输入的值)位
                                          //将移位结果赋予out
endmodule

 

例4.11:3-8编码器的设计实例。
编码器设计方案一。

module encoder1(none_on,out,in);            //模块声明
      output none_on;
      output [2:0] out;
      input [7:0] in;                        //端口声明
      reg [2:0] out;
      reg none_on;                              //寄存器声明
      always @(in) begin: LOCal                //in有变化时,触发
            integer  i;                          //变量声明
            out = 0;
            none_on = 1;                        //初始化
            for( i=0; i<8; i=i+1 ) begin      //for循环语句
                if( in[i] ) begin        //将in中值为1的位编码
                      out = i;
                      none_on = 0;
                end
            end
      end
endmodule

 

  • 1
  • 2
  • 下一页

【看看这篇文章在百度的收录情况】

联系方式

  • 0731-85579057 , 0731-85569651
  • 点击这里给我发消息点击这里给我发消息点击这里给我发消息
网站栏目导航: 培训课程 手机硬件 手机软件 综合维修 学校资讯 考证指南 就业导航 招生指南 教学管理 入学须知 学校图片 教学大纲 师资力量 学生感言 学校概况 教学实景 手机维修培训资讯 电脑维修培训 维修间故事 手机维修培训 液晶电视维修培训 家电维修资料网 电器维修资料网 招生地区 刷机教程 家电维修 手机技巧 老版网站 招生平台网络工程
友情链接: 监控安装培训 电动工具维修 家电维修学校 电工培训学校 液晶电视维修 焊工培训学校 电工焊工学校 电脑维修学校 家电维修培训 电脑维修培训 家装电工培训网络安装维护 主板维修 液晶显示器 笔记本电脑维修 电脑组装维护 电脑硬件维修 电脑维修 电工考证 电工证 装修电工 水电工 维修电工 电工 焊接技术 电焊工 焊工 电动设备维修 电动工具维修 制冷维修 空调维修 冰箱维修  更多>>
阳光-手机维修教育品牌学校
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
电工培训学校 电动车维修学校 摩托车维修学校 摩托车维修培训 手机维修培训 家电维修培训 电脑维修培训 电动工具维修培训 液晶电视维修培训 安防监控培训 空调维修培训 网络营销培训 网站设计培训 淘宝网店培训 电器维修培训 家电维修学校 电工培训 焊工培训 电工学校 电工培训学校 电动车维修学校 摩托车维修学校 摩托车维修培训 手机维修培训 家电维修培训 电脑维修培训 电动工具维修培训 液晶电视维修培训 安防监控培训 空调维修培训 网络营销培训 网站设计培训 淘宝网店培训 电器维修培训 家电维修学校 电工培训 焊工培训 电工学校 电工培训学校 电动车维修学校 摩托车维修学校 摩托车维修培训 手机维修培训 家电维修培训 电脑维修培训 电动工具维修培训 液晶电视维修培训 安防监控培训 空调维修培训 网络营销培训 网站设计培训 淘宝网店培训 电器维修培训 家电维修学校 电工培训 焊工培训 电工学校 电工培训学校 电动车维修学校 摩托车维修学校 摩托车维修培训 手机维修培训 家电维修培训 电脑维修培训 电动工具维修培训 液晶电视维修培训 安防监控培训 空调维修培训 网络营销培训 网站设计培训 淘宝网店培训 电器维修培训 家电维修学校 电工培训 焊工培训 电工学校
中山市,固原市,银川市,玉树,海东,陇南市,酒泉市,张掖市,天水市,金昌市,兰州市,榆林市,延安市,渭南市,铜川市,阿里,山南,拉萨市,怒江,文山州,楚雄州,普洱市,昭通市,玉溪市,昆明市,毕节,铜仁,遵义市,贵阳市,甘孜州,资阳市,达州市,宜宾市,南充市,遂宁市,绵阳市,泸州市,自贡市,三亚市,崇左市,河池市,玉林市,钦州市,梧州市,柳州市,梅州市,肇庆市,湛江市,佛山市,珠海市,韶关市,湘西州,怀化市,郴州市,张家界市,邵阳市,株洲市,仙桃市,随州市,荆州市,荆门市,襄樊市,黄石市,驻马店市,信阳市,南阳市,漯河市,中卫市,石嘴山市,海西,海南藏州,黄南州,海北,甘南,庆阳市,平凉市,武威市,白银市,嘉峪关市,安康市,汉中市,咸阳市,宝鸡市,林芝,日喀则,昌都,迪庆,德宏,大理,西双版纳,红河州,临沧市,丽江市,保山市,曲靖市,黔东州,黔西州,安顺市,六盘水市,凉山州,阿坝州,雅安市,广安市,眉山市,内江市,广元市,德阳市,攀枝花市,成都市,海口市,来宾市,百色市,贵港市,北海市,桂林市,南宁市,云浮市,揭阳市,潮州市,清远市,阳江市,汕尾市,惠州市,茂名市,江门市,汕头市,深圳市,广州市,娄底市,永州市,益阳市,岳阳市,湘潭市,长沙市,恩施州,黄冈市,孝感市,鄂州市,十堰市,武汉市,周口市,商丘市,三门峡市,许昌市,焦作市,安阳市,鹤壁市,平顶山市,开封市,郑州市,聊城市,滨州市,德州市,莱芜市,日照市,泰安市,烟台市,潍坊市,东营市,淄博市,上饶市,济南市,抚州市,宜春市,赣州市,新余市,九江市,景德镇市,宁德市,南平市,泉州市,莆田市,厦门市,宣城市,亳州市,六安市,宿州市,黄山市,滁州市,安庆市,淮北市,马鞍山市,蚌埠市,芜湖市,合肥市,丽水市,舟山市,衢州市,金华市,湖州市,嘉兴市,宁波市,宿迁市,镇江市,盐城市,连云港市,苏州市,徐州市,南京市,绥化市,牡丹江市,佳木斯市,大庆市,鹤岗市,哈尔滨市,白城市,白山市,辽源市,吉林市,葫芦岛市,铁岭市,盘锦市,阜新市,锦州市,本溪市,鞍山市,沈阳市,锡林郭勒盟,通辽市,乌海市,吕梁市,忻州市,晋中市,晋城市,阳泉市,太原市,廊坊市,承德市,保定市,邯郸市,唐山市,宁夏,甘肃省,西藏,贵州省,重庆市,广西,湖南省,河南省,江西省,安徽省,江苏省,黑龙江省,辽宁省,山西省,天津市,四平市,内蒙古,吴忠市,果洛,西宁市,定西市,商洛市,西安市,那曲,黔南州,巴中市,乐山市,贺州市,防城港市,东莞市,河源市,常德市,衡阳市,咸宁市,宜昌市,濮阳市,新乡市,洛阳市,菏泽市,临沂市,威海市,济宁市,枣庄市,青岛市,吉安市,鹰潭市,萍乡市,南昌市,龙岩市,漳州市,三明市,福州市,池州市,巢湖市,阜阳市,铜陵市,淮南市,台州市,绍兴市,温州市,杭州市,泰州市,扬州市,淮安市,南通市,常州市,无锡市,大兴安岭,黑河市,七台河市,伊春市,双鸭山市,鸡西市,齐齐哈尔市,延边,松原市,通化市,长春市,朝阳市,辽阳市,营口市,丹东市,抚顺市,大连市,阿拉善盟,兴安盟,乌兰察布市,巴彦淖尔市,呼伦贝尔市,鄂尔多斯市,赤峰市,包头市,呼和浩特市,临汾市,运城市,朔州市,长治市,大同市,衡水市,沧州市,张家口市,邢台市,秦皇岛市,石家庄市,青海省,陕西省,云南省,四川省,海南省,广东省,湖北省,山东省,福建省,浙江省,上海市,吉林省,河北省,北京市