在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5221|回复: 7

[求助] 编译不过去,一直在提醒 expecting an statement

[复制链接]
发表于 2018-11-21 18:12:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
路过的大神帮看一眼吧,就是一个接口从机的收发数据的代码,就是编译不过去,一共三个模块,接收模块是串行转并行,RAM模块是内存,发送模块是并行转串行,到底问题出在哪啊
`timescale 1ns/1nsmodule spi_sl(sck,cs,rst,spi_mosi,spi_miso);
    input wire sck,cs,rst;
    input wire spi_mosi;
    output wire spi_miso;
    reg spi_en;   //control parallel data send to data_bus
      wire [9:0] data_bus;  //parallel bus
    reg [3:0] state;
    reg [3:0] stateo;
    reg [9:0] spi_i;  //save date when the data send to slave
    //reg [7:0]spi_o;  //save date when the data is sent to master
    //reg re_tb;  //receive register
    //reg se_tb;  //send register
    integer i;
    reg [7:0] mem[0:1]; //ram  2*8
    reg wrd_en = 1'bz; // write and read ram enable 1=write 0=read
    reg add = 1'bz; //address
    reg [7:0]data = 8'bz;
    reg [7:0] data1 = 8'bz;//output register
    parameter ready = 4'b0000,
            bit0 = 4'b0001,
            bit1 = 4'b0011,
            bit2 = 4'b0010,
            bit3 = 4'b0110,
            bit4 = 4'b0111,
            bit5 = 4'b0101,
            bit6 = 4'b0100,
            bit7 = 4'b1100,
            bit8 = 4'b1101,
            bit9 = 4'b1111;
    parameter start = 4'b0000, bito0 = 4'b0001,bito1 = 4'b0011,bito2 = 4'b0010,
            bito3 = 4'b0110,bito4 = 4'b0111,bito5 = 4'b0101,bito6 = 4'b0100,bito7 = 4'b1100;
    //spi_en =1 mean the data have received
    assign data_bus = spi_en?  spi_i:10'bz;
    //serial conversion to parallel bus
    always @(posedge sck or negedge rst)
        begin
            if(!rst)
              begin
              spi_i <= 0;
              spi_en <= 1'b0;
               end
            else

              if(cs)
                begin spi_i <= 0;
                    spi_en <= 1'b0;
                end
              else   

              case (state)
                ready:
                    begin
                    spi_i <= 0;
                    spi_en <= 1'b0;
                    state <= bit0;
                    end
                bit0:
                    begin
                      spi_i <= {spi_i[10:0],spi_mosi};
                       state <= bit1;
                    end
                bit1:
                    begin
                      spi_i <= {spi_i[10:0],spi_mosi};
                      state <= bit2;
                    end
                bit2:
                    begin
                      spi_i <= {spi_i[10:0],spi_mosi};
                      state <= bit3;
                    end
                bit3:
                    begin
                      spi_i <= {spi_i[10:0],spi_mosi};
                      state <= bit4;
                    end
                bit4:
                    begin
                      spi_i <= {spi_i[10:0],spi_mosi};
                      state <= bit5;
                    end
                bit5:
                    begin
                      spi_i <= {spi_i[10:0],spi_mosi};
                      state <= bit6;
                    end
                bit6:
                    begin
                      spi_i <= {spi_i[10:0],spi_mosi};
                      state <= bit7;
                    end

                bit7:
                    begin
                      spi_i <= {spi_i[10:0],spi_mosi};
                      spi_en <= 1'b1;
                      state <= bit8;
                    end
                bit8:
                    begin
                      spi_i <= {spi_i[10:0],spi_mosi};
                      spi_en <= 1'b1;
                      state <= bit9;
                    end
                bit9:
                    begin
                      spi_i <= {spi_i[10:0],spi_mosi};
                      spi_en <= 1'b1;
                      state <= bit10;
                    end
                bit10:
                    begin
                      spi_i <= {spi_i[10:0],spi_mosi};
                      spi_en <= 1'b1;
                      state <= ready;
                    end
                default: state <= ready;
            endcase
        end
    always @(spi_en)
        begin
        if(spi_en)
           begin
           wrd_en = data_bus[9];
           add = data_bus[8];
           data = data_bus[7:0];
           end
        else
            begin
            wrd_en = 1'bz;
            add = 1'bz;
            data = data;
        end
      //ram
    always @(posedge sck or negedge rst)
         begin
        if(!rst)
          begin
            for(i = 0;i <= 1;i = i + 1)   

                mem <= 1'b0;
          end
         else
          begin

            case(wrd_en)
                1: mem[add] <= data;
                0:  data1 <= mem[add];
                default:  data1 <= 8'bz;
            endcase
           

           end
      

      end  

     //output module
    always @(data1)
        begin
          case (stateo)
            start:
               begin
                state0 = bito0;
                spi_miso = data1[7];
                end
            bito0:
               begin
                state0 = bito1;
                spi_miso = data1[6];
                end
            bito1:
               begin
                state0 = bito2;
                spi_miso = data1[5];
                end
            bito2:
               begin
                state0 = bito3;
                spi_miso <= data1[4];
                end
            bito3:
               begin
                state0 = bito4;
                spi_miso = data1[3];
                end
            bito4:
               begin
                state0 = bito5;
                spi_miso = data1[2];
                end
            bito5:
               begin
                state0 = bito6;
                spi_miso = data1[1];
                end
            bito6:
               begin
                state0 = bito7;
                spi_miso = data1[0];
                end
            bito7:
               begin
                state0 = start;
                spi_miso = 1'bz;
                end
            endcase
           end               


endmodule
发表于 2018-11-22 10:55:19 | 显示全部楼层
没有信号用到 i 啊
发表于 2018-11-22 15:34:17 | 显示全部楼层
提醒的哪一行?
发表于 2018-11-27 09:19:54 | 显示全部楼层
no "default" branch for the last case.....
发表于 2018-11-27 11:33:33 | 显示全部楼层
少写了个end
always @(spi_en)
        begin
        if(spi_en)
           begin
           wrd_en = data_bus[9];
           add = data_bus[8];
           data = data_bus[7:0];
           end
        else
            begin
            wrd_en = 1'bz;
            add = 1'bz;
            data = data;
        end
      //ram
发表于 2018-11-27 11:34:46 | 显示全部楼层
第二个问题,写到always里面赋值的,不管是不是寄存器,都要声明成reg
发表于 2018-11-27 11:35:24 | 显示全部楼层
bit8:
                    begin
                      spi_i <= {spi_i[10:0],spi_mosi};
                      spi_en <= 1'b1;
                      state <= bit9;
                    end

位宽不匹配,spi_i
发表于 2018-11-27 11:36:54 | 显示全部楼层
reg a;
always@(posedge clk)
a <= b;
这是a个寄存器

reg a,b,c;
always@(b or c)
a = b & c;
这a是个组合逻辑
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-7-16 13:56 , Processed in 0.022458 second(s), 6 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表