首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >verilog (有限状态机)中的序列检测器问题

verilog (有限状态机)中的序列检测器问题
EN

Stack Overflow用户
提问于 2021-05-19 14:55:16
回答 1查看 149关注 0票数 1

我想做一个序列检测器来检测三个连续的。当检测到序列时,数字电路停止并等待复位信号处于活动状态,因此它将再次检测序列。代码是我写的,但也有一些问题。在xvlog文件中,我有以下错误:

"syntax error near ;" (第23、25、27、29、35、47、48项)

"default case should appear only once" (第23、25、27、29、35、48、49行)。

以下是代码:

代码语言:javascript
复制
`timescale 1ns / 1ps

`define S0 3'd0;
`define S1 3'd1;
`define S2 3'd2;
`define S3 3'd3;
`define S4 3'd4;

module kolo1(out,in,r,clk);
output out;
reg out;
input in,r,clk;
reg [2:0] stanje,sledece_stanje;
initial
begin
stanje=`S0;
sledece_stanje=`S0;
out=0;
end
always @(stanje or r or in)
begin
case(stanje)
`S0: if(r) sledece_stanje=`S1;
     else sledece_stanje=`S0;
`S1: if(in) sledece_stanje=`S2;
     else sledece_stanje=`S0;
`S2: if(in) sledece_stanje=`S3;
     else sledece_stanje=`S0;
`S3: if(in) sledece_stanje=`S4;
     else sledece_stanje=`S0;
`S4: begin 
repeat(1) @(posedge clk);
sledece_stanje=`S0;
end
default: sledece_stanje=`S0;
endcase 
end

always @(posedge clk)
begin
stanje=sledece_stanje;
end

always @(stanje)
begin
case(stanje)
`S0,`S1,`S2,`S3: out=0;
`S4:out=1;
default: out=0;
endcase
end
endmodule

module stimulus;
reg clk,in,res;
wire out;

kolo1 k1(out,in,res,clk);

initial
clk=1'b0;

always 
#2 clk=~clk;

initial 
begin
$monitor($time,"out=%b in=%b res=%b clk=%b",out,in,res,clk);
in=0;res=0;
#2 res=1;
#20 res=0;
#5 res=1;
#30 $finish;
end

endmodule
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-19 15:02:02

您应该从define宏中删除分号:

代码语言:javascript
复制
`define S0 3'd0
`define S1 3'd1
`define S2 3'd2
`define S3 3'd3
`define S4 3'd4

编者做一个简单的文本替换。例如,每当它看到`S0时,它就被替换为3'd0;。因此,

代码语言:javascript
复制
`S0: if(r) sledece_stanje=`S1;

变成:

代码语言:javascript
复制
3'd0;: if(r) sledece_stanje=`S1;

;:是语法错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67605709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档