-
谢谢:victory:
-
谢谢楼主:kiss:
-
:rose: 谢谢
-
夏老您好!
下面是一个SRAM的测试程序。
module sram_test( iRst , //复位
iClk , //时钟
k1,
oSram_a , //SRAM的地址
Sram_dq , //SRAM的数据
oSram_we_n , //SRAM的写使能
oSram_oe_n , //SRAM的输出使能
oSram_ce_n , //SRAM的片选信号
oSram_be_n , //字节高地位的使能
error, //出错红灯亮
task_start , //开始蓝灯亮
task_finish //完成绿灯亮
);
input iRst ;
input iClk ;
input k1;
output [1:0] oSram_be_n ;
output [18:0] oSram_a ;
inout [15:0] Sram_dq ;
output oSram_we_n ;
output oSram_oe_n ;
output oSram_ce_n ;
output error;
output task_start ;
output task_finish;
//ports
wire iRst ;
wire iClk ;
reg [18:0] oSram_a ;
wire [15:0] Sram_dq ;
reg oSram_we_n ;
reg oSram_oe_n ;
reg error ;
reg task_start ;
reg task_finish;
//internal signals
reg [4:0] STATE,NEXT;
reg [15:0] sram_db_reg;
reg [15:0] count ;
//parameters
parameter IDLE = 5'b00001,
WRITE_1 = 5'b00010,
WRITE_2 = 5'b00100,
READ_1 = 5'b01000,
READ_2 = 5'b10000;
assign oSram_ce_n = 1'b0;
assign oSram_be_n = 2'd0;
assign Sram_dq = oSram_oe_n ? sram_db_reg:16'hz;
//state machine
always @ (STATE or oSram_a or error or task_start)
begin
case(STATE)
IDLE : if(!k1)
NEXT = WRITE_1;
else
NEXT = IDLE ;
WRITE_1 : NEXT = WRITE_2;
WRITE_2 : if( oSram_a >= 19'h7ffff)
NEXT = READ_1;
else
NEXT = WRITE_1;
READ_1 : NEXT = READ_2;
READ_2 : if(( oSram_a >= 19'h7ffff)||(error==0))//error ||
NEXT = IDLE;
else
NEXT = READ_1;
default : NEXT = IDLE ;
endcase
end
//registe the state
always @ (posedge iClk or negedge iRst)
if(!iRst)
STATE
-
什么
-
老大也在啊
-
麻烦把测试程序也贴下。
-
这是什么仿真器,没见过!
-
高人啊。:congratulate:
-
这是夏老的回答
-
原帖由 捍卫真理 于 2011-11-10 11:41 发表
夏老您好!
我想问一下下面的状态机设计中的“F”状态可不可以省略,用A状态来代替。
根据:
状态简化: 如果在状态转换图中出现这样两个状态,它们在相同的的输入下转换到同一状态去,并得到一样的 ...
在这个例子中,确实可以省略F状态。之所以举这个例子,就是因为在较复杂的系统设计过程中,确定最简状态十分困难。我的看法是:为了更快更好地完成设计,即使多用几个状态,可很快生成想要的控制信号,也比少用状态不容易完成设计好。当然状态过多会造成资源浪费,也是不值得的。这是一个设计的权衡问题,状态多寡各有利敝,要根据具体情况确定。目前数字系统资源比较便宜,工时十分宝贵,在批量小的设计中,不必过多考虑状态化简。批量大的设计则另当别论。
-
:congratulate:
-
您说的对!向您学习了。
祝夏老身体健康!!!:congratulate:
-
夏老您好!
我想问一下下面的状态机设计中的“F”状态可不可以省略,用A状态来代替。
根据:
状态简化: 如果在状态转换图中出现这样两个状态,它们在相同的的输入下转换到同一状态去,并得到一样的输出,则称为等价状态。显然等价状态是重复的,可以合并为一个。电路的状态数越少,存储电路也就越简单。状态化简的目的就在于将等价状态尽可能地合并,以得到最简状态图。
[例1] 一个简单的状态机设计--序列检测器
//------------ 文件名:seqdet.v -------------------
/*********************************************************************
*** 模块功能:本模块能对串行输入的数据流进行检测,只要发现10010
*** 码型会立即输出一个高位的电平。
*** 本模块是RTL级可综合模块,已通过综合后门级仿真
*********************************************************************/
module seqdet( x, z, clk, rst);
input x,clk, rst;
output z;
reg [2:0] state;//状态寄存器
wire z;
parameter IDLE = 3 'd0,
A = 3 'd1,
B = 3 'd2,
C = 3 'd3,
D = 3 'd4,
E = 3 'd5,
F = 3 'd6,
G = 3 'd7;
assign z =(state==D && x==0) ? 1 :0;
//状态为D时又收到了0,表明10010收到应有输出Z为高
always @(posedge clk or negedge rst)
if(!rst)
begin
state