[CPLD] 程序语句的问题

[复制链接]
1321|6
 楼主| shaorc 发表于 2018-1-3 11:25 | 显示全部楼层 |阅读模式
【不懂就问】
自己学习cpld,就大量看程序例子
如图中,
【1】数据流描述程序中,assign  #,看到书上说是暂时,这里的程序是什么意思?
【2】门极描述程序,是什么意思?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
mcu5i51 发表于 2018-1-3 14:16 | 显示全部楼层
1.就是等待一段时间,一般用于仿真,不可综合;
2.就是用 "门" 为单位的电路,也就是基本的数字电路,等同于用74/4000电路设计的电路

评论

谢谢你的指导  发表于 2018-1-8 13:25
emmmm 发表于 2018-2-6 13:38 | 显示全部楼层
mcu5i51 发表于 2018-1-3 14:16
1.就是等待一段时间,一般用于仿真,不可综合;
2.就是用 "门" 为单位的电路,也就是基本的数字电路,等同于用74 ...

我有个小问题,不敢开贴问,怕说水贴。我遇见一个警告:13012 Latch xxx has unsafe behavior。程序如下
  1. `timescale 1ns/ 1ps
  2. //该程序为无条件触发,随时将numb值译码并传出
  3. module BCD_YiMa (
  4.         input [7:0] numb,        //主程序要转换的十进制数
  5.         output [3:0] numbg,        //存放个位
  6.         output [3:0] numbs        //存放十位
  7. );

  8. reg [17:0] shift;        //移位寄存器

  9. //*************移位加三算法******************
  10. always [url=home.php?mod=space&uid=72445]@[/url] (*) //无条件触发
  11. begin
  12.         shift[7:0] = numb[7:0];//将十进制数存入移位寄存器低八位
  13.        
  14.         repeat (8)        //循环8次
  15.         begin
  16. [b]                if (shift[11:8] > 4'd4)                shift[11:8] = shift[11:8] + 4'd3;                //大于4则加3
  17.                 if (shift[15:12] > 4'd4)        shift[15:12] = shift[15:12] + 4'd3;[/b]
  18.                 shift[17:1] = shift[16:0];                //左移一位
  19.                 //这里需要用阻塞赋值"=",因为若某4位大于4,则需要先加3再移位
  20.         end
  21. end

  22. assign numbg = shift[11:8];
  23. assign numbs = shift[15:12];
  24. endmodule

出问题的那俩行我已经加黑,网上找到都是说要把 if/else 或 case 写完,但我也试着在if下面多加了“else ;”还是无法消除这个警告

评论

@mcu5i51 不好意思,这个加黑看不出来···这两行就在程序的第18、19行  发表于 2018-2-6 13:39
mcu5i51 发表于 2018-2-7 08:39 | 显示全部楼层
可以试试加上begin/end
没有用过几天fpga,经验不多
ucx 发表于 2018-2-7 11:19 | 显示全部楼层
emmmm 发表于 2018-2-6 13:38
我有个小问题,不敢开贴问,怕说水贴。我遇见一个警告:13012 Latch xxx has unsafe behavior。程 ...

14行改成 shift = numb;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

200

主题

613

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部