金百利娱乐真人在线手机app: [verilog] verilog高手看看我的reg变量判断为啥第二种写法编译报错呢?

永利游戏开户直营
173|12
楼主
  1.   reg [31:0]Count;
  2.   //写法1:正确
  3.   always@(posedge sys_clk50,negedge rst_n) begin
  4.     if(!rst_n) begin
  5.       Count <=32'd0;
  6.     end
  7.     else begin
  8.       Count <=Count+1;
  9.       if(Count >= 5000) begin //写法正确
  10.         Count <=0;
  11.       end
  12.     end
  13.   end
  14.   
  15.   //写法2:编译报错
  16.   always@(posedge sys_clk50,negedge rst_n) begin
  17.     if(!rst_n) begin
  18.       Count <=32'd0;
  19.     end
  20.     else begin
  21.       Count <=Count+1;
  22.     end
  23.     //-------------------------编译报错
  24.     if(Count >= 5000) begin
  25.       Count <=0;
  26.     end
  27.   end
复制代码


verilog刚学,,不太明白,报错的提示也不理解,谢谢先
沙发
| 2019-9-10 18:15 | 只看该作者
本帖最后由 rongzhai 于 2019-9-10 18:17 编辑

第二种写法,复位操作中的else和 if(Count >= 5000)是并行执行,逻辑操作上相当于同一时刻对同一个对象进行操作。
板凳
 楼主 | 2019-9-11 08:56 | 只看该作者
rongzhai 发表于 2019-9-10 18:15
第二种写法,金百利娱乐真人在线手机app:复位操作中的else和 if(Count >= 5000)是并行执行,逻辑操作上相当于同一时刻对同一个对象进行 ...

always中的语句不都是顺序执行的吗?
地板
| 2019-9-14 10:10 | 只看该作者
两种都不对。应该这样写:
  always@(posedge sys_clk50,negedge rst_n) begin
    if(!rst_n) begin
      Count <=32'd0;
    end
    else begin
          if(Count >= 5000) begin
               Count <=0;
          end
          else begin
             Count <=Count+1;
         end
    end
  end
5
| 2019-9-14 14:28 | 只看该作者
GavinZ 发表于 2019-9-14 10:10
两种都不对。应该这样写:
  always@(posedge sys_clk50,negedge rst_n) begin
    if(!rst_n) begin

常见的写法都是这样的
6
| 2019-9-17 16:08 | 只看该作者
GavinZ 发表于 2019-9-14 10:10
两种都不对。应该这样写:
  always@(posedge sys_clk50,negedge rst_n) begin
    if(!rst_n) begin

他说的第一种是对,我觉得,你这样会多一个clk,比如到了5000不会执行清0,而要到5000的下一个clk时才会清0,但第一种就是到了5000然后就顺序执行了清0语句。
7
| 2019-9-17 16:09 | 只看该作者
GavinZ 发表于 2019-9-14 10:10
两种都不对。应该这样写:
  always@(posedge sys_clk50,negedge rst_n) begin
    if(!rst_n) begin

他说的第一种是对的,我觉得,你这样会多一个clk,比如到了5000不会执行清0,而要到5000的下一个clk时才会清0,但]第一种就是到了5000然后就顺序执行了清0语句。
8
| 2019-9-17 16:12 | 只看该作者
xiaochunyuan 发表于 2019-9-17 16:09
他说的第一种是对的,我觉得,你这样会多一个clk,比如到了5000不会执行清0,而要到5000的下一个clk时才 ...

不对,应该是你的和他的第一种是一样的,都对,只是表达方式不同
9
 楼主 | 2019-9-18 14:02 | 只看该作者
xiaochunyuan 发表于 2019-9-17 16:12
不对,应该是你的和他的第一种是一样的,都对,只是表达方式不同

嗯,我的第一种和他的写法的效果是一样的,刚才仿真了,波形和rtl图都一样,但是我的那个写法不建议写,不好理解,,,,

为啥我的第一种写法中:
1、第一句话执行后已经满足第二句话了,为啥当时第二句话没有执行,要等到下一个clk后才执行呢?
2、下面2句话是顺序执行的还是并行执行的呢?

      Count <=Count+1;
      if(Count >= 5000)  Count <=0;
10
 楼主 | 2019-9-18 14:03 | 只看该作者
zhangmangui 发表于 2019-9-14 14:28
常见的写法都是这样的

谢谢,能帮我回答下9楼的问题吗
11
 楼主 | 2019-9-18 14:03 | 只看该作者
GavinZ 发表于 2019-9-14 10:10
两种都不对。应该这样写:
  always@(posedge sys_clk50,negedge rst_n) begin
    if(!rst_n) begin

谢谢,能帮我回答下9楼的问题吗
12
 楼主 | 2019-9-19 16:23 | 只看该作者
本帖最后由 (⊙o⊙)你 于 2019-9-19 16:24 编辑
(⊙o⊙)你 发表于 2019-9-18 14:02
嗯,我的第一种和他的写法的效果是一样的,刚才仿真了,波形和rtl图都一样,但是我的那个写法不建议写, ...

想明白了,,直接看RTL图就全部明白了
1、第一次时不满足条件条件,所以没有清0,第二次满足了条件,故清了
2、并行执行

详情见下图


13
| 2019-9-19 22:09 | 只看该作者
(⊙o⊙)你 发表于 2019-9-19 16:23
想明白了,,直接看RTL图就全部明白了
1、第一次时不满足条件条件,所以没有清0,第二次满足了条件,故清 ...

身边多年的逻辑工程师   关键时候都去看逻辑原理图
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

金百利娱乐真人在线手机app: 热门推荐

永利游戏开户直营 快速回复 返回顶部 返回列表
永利游戏开户直营 大富豪彩票网站 永利游戏开户直营 msc836.com 金巴黎彩票电子游戏
龙8国际娱乐官方网址 ag女优厅直营网直营网 hg0088官网开户手机app 金沙官网sands最高占成 ag电子现金网手机app
xycp幸运彩票导航 菲律宾j8图片 齐鲁福利彩票 乐博国际娱乐导航 澳门美高梅娱乐场官网导航
博彩网网站大全登入 立博网手机app 威尼斯人网上娱乐手机登入 真人bl www.33msc.com