verilog8位数的串入并出 代码
吐血求 verilog8位数的串入并出 代码<br>急需啊 达人给指导下吧 大家来瞧瞧吧 没时间拉<br>
偶的学分呀
http://bbs.vibesic.com/images/smilies/default/mad.gif
http://bbs.vibesic.com/images/smilies/default/mad.gif 呵呵,来瞧瞧,可我没有! 我想串入并出该是这样的:有一个 输入量,然后通过左移运算或者拼接 把它的值一次次地赋给 reg的最后一位,八次搞完后就把reg的值输出就OK了。 我是这样写的,不知道对不对?麻烦大家看看,谢谢!
//Serial to Parral
//size = 8
module S2P(clk,in,out,flag);
input clk;
input in;
output out;
reg out;
output flag;
reg flag;
integer count;
reg temp;
//count = 0;
initial
begin
count = 0;
temp <= 0;
temp <= 0;
temp <= 0;
temp <= 0;
temp <= 0;
temp <= 0;
temp <= 0;
temp <= 0;
end
always @(posedge clk)
begin
//begin
temp <= temp;
temp <= temp;
temp <= temp;
temp <= temp;
temp <= temp;
temp <= temp;
temp <= temp;
temp <= in;
//temp << in;
count = count + 1;
//end
if(count == 8)
begin
flag <= 1;
count = 0;
end
else
flag <= 0;
if(flag == 1)
begin
out <= temp;
out <= temp;
out <= temp;
out <= temp;
out <= temp;
out <= temp;
out <= temp;
out <= temp;
end
end
endmodule 我新手笔,这是我想法,不知道对不对<br>
<br>
将串行数据一次付给并行data到data,每付完一次,串行数据移一位,就可以了吧<br>
http://bbs.vibesic.com/images/smilies/default/biggrin.gif 看一下这个,应该有用<br>
<br>
<br>
module tb_transform; <br>
<br>
wire clk, rst, sp, Ds;<br>
wire Dp;<br>
<br>
test_signal test (clk, rst, sp, Ds, Dp);<br>
transform transform (clk, rst, sp, Ds, Dp);<br>
<br>
endmodule <br>
<br>
<br>
<br>
<br>
<br>
<br>
module transform (clk, rst, sp, Ds, Dp);<br>
inout Ds;<br>
inout Dp;<br>
input clk, rst, sp;<br>
<br>
reg Dst,sign;<br>
reg Dpt;<br>
reg counter1, counter2;<br>
<br>
assign Ds=sp?1'bz
http://bbs.vibesic.com/images/smilies/default/biggrin.gif
st;<br>
assign Dp=!sp?8'bz
http://bbs.vibesic.com/images/smilies/default/biggrin.gif
pt; <br>
<br>
always @ (posedge clk or negedge rst)<br>
if(!rst) //寄存器初始化<br>
begin<br>
Dpt<=0;<br>
Dst<=0;<br>
sign<=1;<br>
counter1<=0;<br>
counter2<=0;<br>
end<br>
else if(sp&&(counter1<=7))//串转并<br>
begin<br>
Dpt<=Ds; //将串型输入赋给临时并型寄存器的最低位<br>
Dpt<=Dpt; //临时并型寄存器的低7位向左移一位。<br>
counter1<=counter1+1;<br>
end<br>
else if(!sp&&sign) //先于转换,将并型输入信号暂存到dpt中,并将sign赋0,以防反复向dpt赋值。<br>
begin<br>
Dpt<=Dp;<br>
sign<=0;<br>
end<br>
else if(!sp&&(counter2<=7))//并转串<br>
begin <br>
Dpt<=Dpt; //临时并型寄存器的低7位向左移一位。<br>
Dst<=Dpt; //把最高位赋给输出。<br>
counter2<=counter2+1;<br>
end <br>
<br>
endmodule module wyp_8(dir,rdn,cp,q);<br>
input dir,rdn,cp;<br>
output q;<br>
reg q;<br>
always@(negedge cp or negedge rdn)<br>
begin<br>
if(~rdn) q=0;<br>
else begin q=q>>1;q=dir;end<br>
end<br>
endmodule 这是我写的,呵呵<br>
<br>
/* =========== 串-并转换 =============== */<br>
<br>
module s_p(bits,clk,data_out);<br>
<br>
input clk,bits;<br>
output data_out;<br>
<br>
reg state;<br>
reg data_out;<br>
<br>
<br>
parameter bit1=8'00000001, //独热码定义状态机<br>
bit2=8'00000010,<br>
bit3=8'00000100,<br>
bit4=8'00001000,<br>
bit5=8'00010000,<br>
bit6=8'00100000,<br>
bit7=8'01000000,<br>
bit8=8'10000000;<br>
<br>
always @(posedge clk or negedge reset) begin //主程序开始<br>
if(~reset) state=bit1;<br>
<br>
else<br>
case(state)<br>
bit1: begin<br>
data_out=bits;<br>
state=(state<<1);<br>
end<br>
<br>
bit2: begin<br>
data_out=bits;<br>
state=(state<<1);<br>
end<br>
<br>
bit3: begin<br>
data_out=bits;<br>
state=(state<<1);<br>
end<br>
<br>
bit4: begin<br>
data_out=bits;<br>
state=(state<<1);<br>
end<br>
<br>
bit5: begin<br>
data_out=bits;<br>
state=(state<<1);<br>
end<br>
<br>
bit6: begin<br>
data_out=bits;<br>
state=(state<<1);<br>
end<br>
<br>
bit7: begin<br>
data_out=bits;<br>
state=(state<<1);<br>
end<br>
<br>
bit8:begin<br>
data_out=bits;<br>
state=(state<<1);<br>
end<br>
<br>
default:<br>
state=bit1;<br>
<br>
endcase <br>
end<br>
<br>
endmodule
页:
[1]