2009-01-28 113 views
3

我发布了answeranother stackoverflow question,这需要一些数字逻辑以Verilog或VHDL实现,以便可以将其编程到FPGA中。如何以Verilog或VHDL实现这个数字逻辑?

您将如何使用Verilog,VHDL或任何其他硬件描述语言实现以下逻辑图?

编号框表示字段中的位。每个字段具有 K位,并且当前的位掩码将由计算机系统(使用锁存寄存器或等价物)提供。 下一个中的位将被读回到同一计算机系统中。

alt text http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7.jpg

参见:this stackoverflow question

+0

仅供参考,图片链接是(现在)打破了。 – 2011-02-02 22:42:19

+0

@ luis.espinal对我来说显示得很好,但我知道很多企业网页过滤器(例如WebSense)会过滤掉第三方图片。 – 2011-02-02 22:59:29

回答

2

像这样的事情?

module scheduler 
#(parameter K = 10) 
    (
    input wire [K:1] current, 
    input wire [K:1] mask, 
    output reg [K:1] next 
    ); 

    reg [K:1] a; 
    reg [K:1] b; 

    //'[i+1]' busses that wrap. 
    // eg, for a 4-bit bus... 
    // a[i]:  a[4],a[3],a[2],a[1] (obviously...) 
    // a_wrap[i]: a[1],a[4],a[3],a[2] 
    wire [K:1] mask_wrap = { mask[1],mask[K:2] }; 
    wire [K:1] a_wrap  = { a[1], a[K:2] }; 
    wire [K:1] current_wrap = { current[1], current[K:2] }; 

    integer i; 
    always @(*) begin 
     for(i=1; i<=K; i=i+1) begin 
     a[i] = ~current_wrap[i] && b[i]; 
     b[i] = a_wrap[i] || mask_wrap[i]; 
     next[i] = ~a[i] && mask_wrap[i]; 
     end 
    end 


endmodule 

(免责声明:LINTED但没有模拟)