模式生成器(verilog)

时间:2017-06-30 16:10:14

标签: verilog

我需要在Verilog代码中编写一个顺序电路作为模式生成器,它逐字符地生成您的名字(空格)姓氏(空格),而不是二进制计数。我需要显示模式序列至少两个周期。

diagram

这是示例输出: sampleoutput

我知道我的程序存在的问题出现在CoderMod模块中,但我不确定问题出在哪里。

感谢您的帮助!

//pattern.v

module TestMod;
   reg CLK;
   wire [0:11] Q;
   wire [6:0] ascii;
   initial begin 
      #1;
      forever begin 
        CLK=0;
        #1;
        CLK=1;
        #1;
      end

   end

   RippleMod my_ripple(CLK, Q);
   CoderMod my_coder(Q, ascii);
   initial #27 $finish;
   initial begin
      $display("Time   CLK   Q                      Name");
      $monitor("%4d    %b    %b    %c  %x  %b", $time, CLK, Q, ascii, ascii, ascii);
   end
endmodule

module CoderMod(Q, ascii); 
   input [0:13]Q;
   output [13:0] ascii;
   assign ascii[0] = "F";
   assign ascii[1] = "i";
   assign ascii[2] = "r";
   assign ascii[3] = "s";
   assign ascii[4] = "t";
   assign ascii[5] = " ";
   assign ascii[6] = "L";
   assign ascii[7] = "a";
   assign ascii[8] = "s";
   assign ascii[9] = "t";
   assign ascii[10] = "n";
   assign ascii[11] = "a";
   assign ascii[12] = "m";
   assign ascii[13] = "e";

   or(ascii[0], Q[13]);
   or(ascii[1], Q[12]);
   or(ascii[2], Q[11]);
   or(ascii[3], Q[10]);
   or(ascii[4], Q[9]);
   or(ascii[5], Q[8]);
   or(ascii[6], Q[7]);
   or(ascii[7], Q[6]);
   or(ascii[8], Q[5]);
   or(ascii[9], Q[4]);
   or(ascii[10], Q[3]);
   or(ascii[11], Q[2]);
   or(ascii[12], Q[1]);
   or(ascii[13], Q[0]);

endmodule

module RippleMod(CLK, Q);
   input CLK;
   output [0:15]Q;
   reg [0:15]Q;
   always @(posedge CLK) begin
      Q[0] <= Q[15]; 
      Q[1] <= Q[0];
      Q[2] <= Q[1];
      Q[3] <= Q[2];
      Q[4] <= Q[3];
      Q[5] <= Q[4];
      Q[6] <= Q[5];
      Q[7] <= Q[6];
      Q[8] <= Q[7];
      Q[9] <= Q[8];
      Q[10] <= Q[9];
      Q[11] <= Q[10];
      Q[12] <= Q[11];
      Q[13] <= Q[12];
      Q[14] <= Q[13];
      Q[15] <= Q[14];
   end

   initial begin 
      Q[0] = 1;
      Q[1] = 0;
      Q[2] = 0;
      Q[3] = 0;
      Q[4] = 0;
      Q[5] = 0;
      Q[6] = 0;
      Q[7] = 0;
      Q[8] = 0;
      Q[9] = 0;
      Q[10] = 0;
      Q[11] = 0;
      Q[12] = 0;
      Q[13] = 0;
      Q[14] = 0;
      Q[15] = 0;
   end
endmodule

1 个答案:

答案 0 :(得分:0)

您的计划实际上存在多个问题。即你将ascii数组声明为wire [6:0] ascii;,但稍后你将它作为CoderMod my_coder(Q, ascii);连接到模块,它是一个宽度为14的输出端口。你还可以将8位字符分配给一位ascii,像这里:ascii[1] = "i";

作为提示,您需要将其声明为

 wire [6:0] ascii [13:0];

你能够弄明白其余的事情。