基于 MARCH C+ 算法的SRAM BIST

基于 MARCH C+ 算法的SRAM BISTSRAMBIST 顶层 RSAMBIST 结构图 SRAMBIST MEM BIST V Author jianqiao RevisionHist 2020 4 1 Revision 1 0 Eailbox jian

 

基于 MARCH C+ 算法的SRAM BIST
SRAM BIST 顶层

基于 MARCH C+ 算法的SRAM BIST
RSAM BIST 结构图’

 

 

 SRAM BIST : MEM_BIST.V 

 //Author : jian qiao //Revision History : 2020-4-1 // Revision : 1.0 //Eailbox :  // `timescale 1ns/1ps module mem_bist ( clk,rstn,error,done); parameter data_size = 8; parameter addr_size = 8; parameter word_depth = 256; input clk; input rstn; output errro; output done; wire [data_size-1:0] datalock; wire [addr_size-1:0] a; wire [data_size-1:0] d; wire [data_size-1:0] q; wire wen; wire cen; control dut1 ( .clk (clk), .rstn (rstn), .wen (wen), .cen (cen), .addr (a), .data (d), .datalock (datalock) ); data_comparator dut2 ( .clk (clk), .rstn (rstn), .q (q), .datalock (datalock), .wen (wen), .error (error), .done (done) ); ram dut3 ( .clk (clk), .cen (cen), .wen (wen), .a (a), .d (d), .q (q) ); endmodule 

CONTROL.V

 //Author : jian qiao //Revision History : 2020-4-1 // Revision : 1.0 //Eailbox :  // `tiemscale 1ns/1ps module control (clk,rstn,wen,cen,addr,data,datalock); parameter addr_size = 8; parameter data_size = 8; parameter word_depth = 256; input clk; input rstn; output wen; output cen; output [addr_size-1:0] addr; output [data_size-1:0] data; output [data_size-1:0] datalock; reg wen; reg cen; reg [addr_size-1:0] addr; reg [data_size-1:0] data; reg [data_size-1:0] datalock; reg [1:0] pattern; reg i; reg [3:0] state; parameter data_b1 = 8'b0000_0000; parameter data_b2 = 8'b0000_1111; parameter data_b3 = 8'b0101_0101; parameter data_b4 = 8'b0011_0011; parameter idle = 4'd0, s1 = 4'd1, s2 = 4'd2, s3 = 4'd3, s4 = 4'd4, s5 = 4'd5, s6 = 4'd6, updata = 4'd7, stop = 4'd8; always @ (posedge clk or negedge rstn) begin if (!rstn) begin cen <= 1'b1; wen <= 1'b0; pattern <= 2'b0; data <= data_b1; addr <= 8'd0; datalock <= 8'd0; i <= 1'b0; state <= idle; else begin case (state ) idle : begin cen <= 1'b0; wen <= 1'b0; addr <= word_depth-1; data <= data_b1; pattern <= 2'd0; i <= 1'b0; state <= s1; end s1 : begin if (addr > 8'd0) begin addr <= addr - 8'd1; state <= s1; end else begin addr <= 8'd0; wen <= 1'b1; data <= ~data; datalock <= data; state <= s2; end end s2 : begin if (wen == 0) beign wen <= 1'b1; datalock <= ~datalock; state <= s2; end else if (i==0) begin wen <= 1'b0; i <= 1'b1; state <= s2; end else if(addr <= word_depth -1 ) begin state <= s2; addr <= addr 8'd1; i <= 1'b0; datalock <= ~datalock; end else begin addr <= 8'd0; data <= ~data; state <= s3; i <= 1'b0; datalock <= data; end end s3 : begin if (wen == 1'b0) begin wen <= 1'b1; datalock <= ~datalock; state <= s3; end else if (i == 0) begin wen <= 1'b0; i <= 1'b1; state <= s3; end else if (addr < word_depth -1) begin addr <= addr + 8'd1; i <= 1'b0; datalock <= ~datalock; state <= s3; end else begin addr <= word_depth -1; data <= ~data; i <= 1'b0; datalock <= data; state <= s4; end end s4 : begin if (wen == 0) begin wen <= 1'b1; datalock <= ~datalock; state <= s4; end else if (i == 0) begin wen <= 1'b0; i <= 1'b1; state <= s4; end else if ( addr > 8'd0) begin addr <= addr - 8'd1; datalock <= ~datalock; i <= 1'b0; state <= s4; end else begin addr <= word_depth -1; data <= ~data; datalock <= data; i <= 1'b0; state <= s5; end end s5 : begin if (wen == 0) begin wen <= 1'b1; datalock <= ~datalock ; state <= s5; end else if (i == 0) begin i <= 1; wen <= 0; state <= s5; end else if ( addr > 8'd0) begin i <= 0; addr <= addr - 8'd1; datalock <= ~datalock; state <= s5; end else begin addr <= 8'd0; datalock <= data; state <= s6; end end s6 : begin if (addr < word_depth -1) addr <= addr + 8'd1; else begin wen <= 0; i <= 0; state <= updata; end end updata : begin if (pattern == 0) begin data <= data_b2; pattern <= pattern + 1; state <= s1; end else if (pattern == 1) begin data <= data_b3; pattern <= pattern + 1; state <= s1; end else if ( pattern == 2 ) begin data <= data_b4; pattern <= pattern + 1; state <= s1; end else state <= stop; stop : begin cen <= 1; end default : state <= idle; endcase end end endmodule 

DATA_COMPATATOR.V 

 //Author : jian qiao //Revision History : 2020-4-1 // Revision : 1.0 //Eailbox :  // `timescale 1ns/1ps module data_comparator ( clk ,rstn,datalock,wen,q,error,done); parameter addr_size = 8, data_size = 8, word_depth = 256; input wen; input [data_size-1:0] datalock; input clk; input rstn; input [data_size-1:0] q; output error; output done; reg error; reg done; reg [data_size-1:0] q1; reg [data_size-1:0] datalock1; always @ (posedge clk or negedge rstn) beign if (!rstn) begin error <= 0; done <= 0; q1 <= 8'd0; datalock1 <= 8'd0; end else begin q1 <= q; datalock1 <= datalock; if (wen == 1) beign if (datalock1 == q1) begin error <= 0; done <= 1; end else begin error <= 1; done <= 1; end end else beign error <= error; done <= done ; end end end endmodule 
基于 MARCH C+ 算法的SRAM BIST
实现时序图

 

sram 的话就不挂了,那部分相对来说比较简单,很容易就可以写出啦。

希望我的个人练习对你有借鉴价值。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230234.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android下基于Iptables的一种app网络访问控制方案(二)

    Android下基于Iptables的一种app网络访问控制方案(二)3.如何在Android系统中集成?以上通过adb shell命令行在Android设备上将方案调通之后,接下来考虑如何集成在Android系统中。作为一个整体解决方案,需要至少解决两部分功能:(1)网络访问规则。包括规则定义、存储、对外接口、对内转化成Iptables命令。(2)Iptables命令执行。第一部分比较简单,在此不详述。主要看第二部分。对于某一个垂直功能,And

    2022年7月23日
    6
  • WPF特效-鱼游动动画

    WPF特效-鱼游动动画

    2021年6月10日
    108
  • Microsoft Office Excel 不能访问文件 的解决办法

    Microsoft Office Excel 不能访问文件 的解决办法

    2022年3月5日
    399
  • 【DeepLearning学习笔记】Neurons神经元

    【DeepLearning学习笔记】Neurons神经元今天找到一个比较好的deeplearning的教材:NeuralNetworksandDeepLearning对神经网络有详细的讲解,鉴于自己青年痴呆,还是总结下笔记吧=。=Perceptr

    2022年8月5日
    6
  • Java单例模式8种方式 详解

    Java单例模式8种方式 详解Singleton所谓单例,指的就是单实例,有且仅有一个类实例,这个单例不应该由人来控制,而应该由代码来限制,强制单例。运用场景很多,例如网站的在线人数,window系统的任务管理器,网站计数器等等,这些都是单例模式的运用。单例模式有常见的8种形式,如下:1.Lazy1【不可用】懒汉式1:线程不稳定延迟初始化多线程不安全是最基本的实现方式,不支持多线程,因为没有synchronized加锁,多线程不能工作。实现图多线程则会出现,当Singleton_La

    2022年8月11日
    9
  • OSPF报文类型

    OSPF报文类型OSPF 报文头格式 OSPF 用 IP 报文直接封装协议报文 协议号为 89 OSPF 分为 5 种报文 Hello 报文 DD 报文 LSR 报文 LSU 报文和 LSAck 报文 OSPF 这五种报文具有相同的报文头格式 长度为 24 字节 报文格式 字段解释 Version1 字节版本 OSPF 的版本号 对于 OSPFv2 来说 其值为 2 字段长度含义

    2025年11月30日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号