3546|5

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

能否看一下以下程序哪里出问题了,谢谢帮助 [复制链接]

module  xiyi(QP,cp,MUSIC,k,zheng,fan,rst,CLK,BCD1,BCD2,Segout, SG1,SG2,SG3,SG4,SG5,SG6);
input k,rst;
input cp;
input [7:0]QP;
input CLK;
input [3:0]BCD1,BCD2;
output [6:0]Segout;
output SG1,SG2,SG3,SG4,SG5,SG6;
output zheng,fan,MUSIC;
reg zheng = 1'b1;
reg fan = 1'b1;
reg MUSIC = 1'b1;
reg [7:0]cnt;
reg [7:0]count_ge;
reg [7:0]count_shi;
reg kai = 1'b1;
reg [3:0]Q,P,A,B;
reg  [6:0] Segout;
reg [2:0] Count;
reg  [3:0] Seg_in;  
always @ (posedge cp) begin
       
        if(~rst)        begin                       
                count_shi <= 8'h00;
                count_ge <=8'h00;
                kai <= 1'b1;
                Q <= 4'd0;
                P <= 4'd0;
                B <= 4'd0;
                A <= 4'd0;
                MUSIC <= 1'b1;
                zheng <= 1'b1;
                fan <= 1'b1;
                end
       
        if(~k)        begin                               
                count_shi <= QP;
                MUSIC <= 1'b1;
                kai <= ~kai;                       
                end
               
        else if(k)       
                count_shi <= count_shi;
       
        if(~kai)        begin
       
        count_ge <= count_ge - 1'b1;
       
        if(count_ge[3:0] == 4'd0)        begin       
                count_ge[3:0] <= 4'd9;
                count_ge[7:4] <= count_ge[7:4] - 1'b1;
                if(count_ge[7:4] == 4'd0)        begin
                        count_shi[3:0] <= count_shi[3:0] - 1'b1;
                        count_ge[7:4] <= 4'd5;
                        if(count_shi[3:0] == 4'd0)           begin
                                count_shi[7:4] <= count_shi[7:4] - 1'b1;
                                count_shi[3:0] <= 4'd9;
                                if(count_shi[7:4] == 4'd0)       
                                        count_shi[7:4] <= 4'd5;
                                end
                        end
                end
        end
               
        if(~kai)        begin
                P <= count_shi[7:4];
                Q <= count_shi[3:0];
                if((count_ge < 8'h11) && (count_ge >= 8'h01) )        begin                               
                        zheng <= 1'b1;        
                        fan <= 1'b1;
                        end
                               
                else if((count_ge > 8'h10) && (count_ge < 8'h31))        begin               
                        zheng <= 1'b1;
                        fan <= 1'b0;       
                        end
                               
                else if((count_ge > 8'h30) && (count_ge < 8'h41))        begin               
                        zheng <= 1'b1;
                        fan <= 1'b1;
                        end
                                       
                else if((count_ge > 8'h40) && (count_ge < 8'h60))        begin       
                        zheng <= 1'b0;
                        fan <= 1'b1;
                        end
        end               
always @(posedge CLK)
                case (Count)
                        3'b000: begin  {SG1,SG2,SG3,SG4,SG5,SG6} = 6'b011111;
                        Seg_in = BCD1;
                        Count = Count+1;
                        end
                        3'b001: begin  {SG1,SG2,SG3,SG4,SG5,SG6} = 6'b101111;
                        Seg_in = BCD2;   
                        Count = Count+1;  
                        end

                        3'b010: begin  {SG1,SG2,SG3,SG4,SG5,SG6} = 6'b110111;
                        Seg_in = Q;   
                        Count = Count+1;  
                        end
                        3'b011: begin  {SG1,SG2,SG3,SG4,SG5,SG6} = 6'b111011;
                        Seg_in = P;   
                        Count = Count+1;  
                        end
                        3'b100: begin  {SG1,SG2,SG3,SG4,SG5,SG6} = 6'b111101;
                        Seg_in = A;   
                        Count = Count+1;
                        end
                        3'b0101: begin {SG1,SG2,SG3,SG4,SG5,SG6} = 6'b111110;
                        Seg_in = B;   
                        Count = 3'b000;
                        end
                        endcase
                        end
                always @(Seg_in)
                                case (Seg_in)
                4'b0000: Segout=7'b1000000; //0(40H)
                4'b0001: Segout=7'b1111001; //1(79H)
                4'b0010: Segout=7'b0100100; //2(24H)
                4'b0011: Segout=7'b0110000; //3(30H)
                4'b0100: Segout=7'b0011001; //4(19H)
                4'b0101: Segout=7'b0010010; //5(12H)
                4'b0110: Segout=7'b0000010; //6(02H)
                4'b0111: Segout=7'b1111000; //7(78H)
                4'b1000: Segout=7'b0000000; //8(00H)
                4'b1001: Segout=7'b0010000; //9(10H)
                                endcase
        endmodule
错误提示如下:Error (10170): Verilog HDL syntax error at xiyi.v(88) near text "always";  expecting ";", or "@", or "end", or an identifier ("always" is a reserved keyword ), or a system task, or "{", or a sequential statement
Error (10170): Verilog HDL syntax error at xiyi.v(116) near text "always";  expecting ";", or "@", or "end", or an identifier ("always" is a reserved keyword ), or a system task, or "{", or a sequential statement
此帖出自FPGA/CPLD论坛

最新回复

个人感觉你的程序问题太多,对VERILOG硬件描述语言还没入门 1. 对VERILOG语法描述对应的硬件电路不清楚. 2. 对BEGIN----END 使用方法也不清楚 if(~kai) beginP <= count_shi[7:4];Q <= count_shi[3:0];if((count_ge < 8'h11) && (count_ge >= 8'h01) ) begin zheng <= 1'b1; fan <= 1'b1;end 例如上面的描述可能没有表达你的本意! 你的意思是否如下:if(~kai) beginP <= count_shi[7:4];Q <= count_shi[3:0]; end if((count_ge < 8'h11) && (count_ge >= 8'h01) ) begin beginzheng <= 1'b1; fan <= 1'b1;end 3. 整个程序结构不清楚!     详情 回复 发表于 2011-7-4 08:50
点赞 关注
 

回复
举报

3

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
后两个always后面都begin、end,应该是这样的
此帖出自FPGA/CPLD论坛
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
if(count_ge[3:0] == 4'd0) begin
count_ge[3:0] <= 4'd9;
count_ge[7:4] <= count_ge[7:4] - 1'b1;
if(count_ge[7:4] == 4'd0) begin
count_shi[3:0] <= count_shi[3:0] - 1'b1;
count_ge[7:4] <= 4'd5;
有begin......end不匹配!!!!
此帖出自FPGA/CPLD论坛
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

4
 
貌似begin...end匹配没什么问题,不过在第88行开始的always语句中,你的count寄存器的初值从何而来并未定义~~
此帖出自FPGA/CPLD论坛
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

5
 
然后在always模块中,表示时序逻辑最好使用非阻塞赋值,同时非阻塞赋值和阻塞赋值不要出现在同一always模块中,否则会出现综合错误~~
此帖出自FPGA/CPLD论坛
 
 
 

回复

6892

帖子

0

TA的资源

五彩晶圆(高级)

6
 

个人感觉你的程序问题太多,对VERILOG硬件描述语言还没入门

1. 对VERILOG语法描述对应的硬件电路不清楚.

2. 对BEGIN----END 使用方法也不清楚

if(~kai) begin
P <= count_shi[7:4];
Q <= count_shi[3:0];
if((count_ge < 8'h11) && (count_ge >= 8'h01) ) begin
zheng <= 1'b1;
fan <= 1'b1;
end
 例如上面的描述可能没有表达你的本意!

你的意思是否如下:
if(~kai) begin
P <= count_shi[7:4];
Q <= count_shi[3:0];

end

if((count_ge < 8'h11) && (count_ge >= 8'h01) ) begin

begin
zheng <= 1'b1;
fan <= 1'b1;
end

3. 整个程序结构不清楚!

 

此帖出自FPGA/CPLD论坛
个人签名一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表