模式生成器(verilog)
我需要用Verilog代码编写一个序列电路,作为一个模式生成器,它可以逐个字符地生成Firstname(空格)Lastname(空格),而不是二进制计数。我需要显示至少两个周期的模式序列 这是示例输出: 我知道我的程序存在的问题在CoderMod模块中,但我不确定问题在哪里 谢谢你的帮助模式生成器(verilog),verilog,Verilog,我需要用Verilog代码编写一个序列电路,作为一个模式生成器,它可以逐个字符地生成Firstname(空格)Lastname(空格),而不是二进制计数。我需要显示至少两个周期的模式序列 这是示例输出: 我知道我的程序存在的问题在CoderMod模块中,但我不确定问题在哪里 谢谢你的帮助 //pattern.v module TestMod; reg CLK; wire [0:11] Q; wire [6:0] ascii; initial begin
//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
//pattern.v
模块TestMod;
注册时钟;
导线[0:11]Q;
有线[6:0]ascii码;
初始开始
#1;
永远开始
CLK=0;
#1;
CLK=1;
#1;
结束
结束
RippleMod my_ripple(CLK,Q);
CoderMod my_编码器(Q,ascii);
初始#27美元完成;
初始开始
$display(“时间时钟Q名称”);
$monitor(“%4d%b%b%c%x%b”,$time,CLK,Q,ascii,ascii,ascii);
结束
端模
模块CoderMod(Q,ascii);
输入[0:13]Q;
输出[13:0]ascii码;
指定ascii[0]=“F”;
分配ascii[1]=“i”;
指定ascii[2]=“r”;
指定ascii[3]=“s”;
分配ascii[4]=“t”;
指定ascii[5]=“”;
指定ascii[6]=“L”;
分配ascii[7]=“a”;
指定ascii[8]=“s”;
指定ascii[9]=“t”;
指定ascii[10]=“n”;
指定ascii[11]=“a”;
指定ascii[12]=“m”;
指定ascii[13]=“e”;
或(ascii[0],Q[13]);
或(ascii[1],Q[12]);
或(ascii[2],Q[11]);
或(ascii[3],Q[10]);
或(ascii[4],Q[9]);
或(ascii[5],Q[8]);
或(ascii[6],Q[7]);
或(ascii[7],Q[6]);
或(ascii[8],Q[5]);
或(ascii[9],Q[4]);
或(ascii[10],Q[3]);
或(ascii[11],Q[2]);
或(ascii[12],Q[1]);
或(ascii[13],Q[0]);
端模
模块RippleMod(时钟,Q);
输入时钟;
输出[0:15]Q;
reg[0:15]Q;
始终@(posedge CLK)开始
Q[0]您的程序实际上存在多个问题。i、 e.您将ascii数组声明为wire[6:0]ascii
但稍后您将其作为CoderMod my_编码器(Q,ascii)连接到模块代码>其中它是宽度为14的输出端口。您还可以将8位字符分配为一位ascii,如下所示:ascii[1]=“i”代码>
作为提示,您需要将其声明为
wire [6:0] ascii [13:0];
你应该能搞清剩下的 为什么Q
的范围定义为[0:11]
、[0:13]
和[0:15]
?为什么要将8位值指定给ascii
索引的单个位?为什么要将ascii
的每一位赋值两次(assign
和或)?